如何清理 URL
http://localhost/mysitedirectory/contacts.php
看起來像兩者:
http://localhost/mysitedirectory/contacts
http://localhost/mysitedirectory/contacts/
我想要這個是因為用戶可能會添加結尾的斜杠或保留它,所以我希望 .htaccess 配置為它可以雙向作業。
我注意到當我/在contacts它的末尾添加“OBJECT NOT FOUND”...錯誤 404
即使我添加斜杠,我如何使它作業?
這是我試過的:
RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^contacts$ contacts.php [L,QSA,NC]
RewriteRule ^home$ index.php [L,QSA,NC]
uj5u.com熱心網友回復:
CBroe在評論部分回答:
^contacts/?$ - 末尾的斜線,由以下量詞問號變為可選。
uj5u.com熱心網友回復:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^contacts$ contacts.php [L,QSA,NC] RewriteRule ^home$ index.php [L,QSA,NC]
這兩個RewriteCond指令(檔案系統檢查)完全是多余的,應該洗掉。(就像指令QSA上的標志一樣RewriteRule。)
但是,與其允許/contacts和/contacts/(嚴格來說是兩個不同的URL)決議為相同的內容(這將需要rel="canonical"標簽),您應該從外部重定向到另一個(規范)URL。
從外觀上看,沒有尾部斜杠的 URL是規范的,因此使用外部重定向洗掉尾部斜杠。唯一需要注意的是,您不應從物理目錄中洗掉尾部斜杠(這通常會導致重定向回圈)。
例如:
Options -Indexes -MultiViews
RewriteEngine On
# Canonical redirect to remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (. )/$ /$1 [R=301,L]
# Internal rewrites
RewriteRule ^contacts$ contacts.php [L,NC]
RewriteRule ^home$ index.php [L,NC]
在NC國旗上RewriteRule的指示使contacts,CONTACTS和CoNtAcTs所有的決心,同樣的內容。(所以rel="canonical"仍然需要標簽來解決這種歧義。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/371382.html
