我正在學習如何配置 htaccess。今天,我想在打開某個 PHP 頁面時隱藏 PHP 訪問,而不從檔案中洗掉擴展名。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
此代碼有效,但它洗掉了所有 PHP 檔案的 PHP 擴展名。如何將其限制為僅一個檔案?假設路徑是:https ://example.com/content/myfile.php
而且,如果我以后想添加另一個檔案,例如https://example.com/content/otherfile.php,我怎么能不寫兩次相同的規則呢?謝謝!
uj5u.com熱心網友回復:
使用我剛剛發布的代碼,我可以正確訪問 example.com/content/myfile。但我想將其限制為僅此 URL。
RewriteRule ^content/myfile$ content/myfile.php [L]
或者,使用反向參考來保存重復:
RewriteRule ^content/myfile$ $0.php [L]
$0反向參考包含與RewriteRule 模式匹配的URL 路徑(即“content/myfile”)。
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php此代碼有效,但它洗掉了所有 PHP 檔案的 PHP 擴展名。
(如評論中所述,這實際上并沒有“洗掉”任何東西。)
但這僅適用于在.php應用擴展名時作為物理檔案存在的請求,因此如果您不希望它應用,那么您不應該首先請求沒有.php擴展名的任意 URL。(?)
而且,如果我以后想添加另一個檔案,例如,
https://example.com/content/otherfile.php我怎么能不寫兩次相同的規則呢?
如果您只想將此應用于第二個任意檔案,那么您顯然需要兩次撰寫基本相同的規則(或修改現有規則),否則,Apache 如何知道重寫 URL(無需撰寫更通用的規則,您最初)?
您可以將這兩個規則組合/簡化為一個,但這不一定是一種改進。例如,以下單個規則將重寫兩個 URL:
RewriteRule ^content/(myfile|otherfile)$ $0.php [L]
但這確實是您發布的第一條規則的目的 - 因此您不需要.htaccess為每個 URL 撰寫第二條規則(或每次更新您的檔案)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480697.html
