Php

mod_rewrite 刪除尾部斜杠導致循環

  • October 11, 2012

我有一個使用 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指令禁用該行為。

引用自:https://serverfault.com/questions/437220