Php
mod_rewrite 刪除尾部斜杠導致循環
我有一個使用 mod_rewrite 製作漂亮 URL 的網站……在我閱讀的任何地方,刪除尾部斜杠對 SEO 都有好處,因此我遵循了以下規則:
RewriteRule ^(.+)/$ /$1 [R=301,L]
我認為 301 重定向可能會影響性能,但這不是我的問題……
問題是,當我嘗試訪問 EXISTING 子目錄的 index.php 時,刪除尾部斜杠會導致我出現循環,如下所示:http: //mysite.com/a-real/directory/
據我了解, mod_rewrite 嘗試刪除尾部斜杠,但在這種情況下它不應該這樣做。
我怎樣才能解決這個問題?我打賭這是一個相當簡單的解決方案,但超出了我的知識範圍。
最簡單的解決方案可能是告訴 .htaccess 如果文件或目錄存在則不要重定向
將以下兩行添加到條件中以防止這種情況
RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f
(如果您使用符號連結的目錄/文件,也可以添加 -l)
此外,正如您所建議的,刪除 301,因此您的完整 htaccess 將是:
Options +FollowSymLinks RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.+)/$ /$1 [L]
您可能應該查看文件
mod_dir
http://servername/foo/dirname
當伺服器收到對dirname 是目錄的 URL 的請求時,會發出“尾部斜杠”重定向。目錄需要尾部斜杠,因此 mod_dir 發出重定向到http://servername/foo/dirname/
.該模組可能在您刪除它之後再次添加斜線等。您可以使用該
DirectorySlash
指令禁用該行為。