我有一个网站使用mod_rewrite制作漂亮的url…我到处阅读删除结尾的斜杠对search引擎优化很好,因此我遵循规则:
RewriteRule ^(.+)/$ /$1 [R=301,L]
我认为301redirect可能会影响性能,但这不是我的问题…
事情是,当我尝试访问一个EXISTING子目录的index.php像这样删除尾部的斜杠导致我循环: http : //mysite.com/a-real/directory/
据我了解,mod_rewrite试图删除后面的斜杠,但在这种情况下,它不是假设。
我怎样才能解决这个问题? 我敢打赌,这是一个相当简单的解决scheme,但超出我的知识。
最简单的解决scheme可能是告诉.htaccess如果文件或目录存在不redirect
将以下两行添加到条件以防止这种情况
RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f
(如果使用符号链接的目录/文件,也可以添加-l)
另外,正如你所build议的,放弃301,所以你的完整htaccess将是:
Options +FollowSymLinks RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.+)/$ /$1 [L]
你应该看看mod_dir
的文档
当服务器收到URL
http://servername/foo/dirname
其中dirname是目录)的请求时,会发出“尾部斜线”redirect。 目录需要一个尾部斜线,所以mod_dir发出一个redirect到http://servername/foo/dirname/
。
这个模块可能在删除它之后再次添加一个斜杠等等。你可以使用DirectorySlash
指令来禁止这个行为。