我有一个网站使用 mod_rewrite 来制作漂亮的 URL...我到处都看到删除尾随斜杠有利于 SEO,因此我遵循了以下规则:
RewriteRule ^(.+)/$ /$1 [R=301,L]
我认为 301 重定向可能会影响性能,但这不是我的问题......
问题是,当我尝试访问现有子目录的 index.php 时,删除尾随斜杠会导致循环,如下所示:http://mysite.com/a-real/directory/
据我了解,mod_rewrite 尝试删除尾随斜杠,但在这种情况下它不应该这样做。
我该如何解决这个问题?我敢打赌这是一个相当简单的解决方案,尽管超出了我的知识范围。
答案1
最简单的解决方案可能是告诉 .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]
答案2
你可能应该看看mod_dir
当服务器收到 URL 请求时,
http://servername/foo/dirname
如果 dirname 是目录,则会发出“尾部斜杠”重定向。目录需要尾部斜杠,因此 mod_dir 会发出到 的重定向http://servername/foo/dirname/
。
此模块可能会在您删除它之后再次添加斜线,等等。您可以使用DirectorySlash
指示。