mod_rewrite重定向搞砸路径

时间:2009-07-17 06:56:37

标签: .htaccess mod-rewrite

这是我的重定向:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

问题是如果我输入http://www.example.com/apple,那么当我的页面上的链接就可以了。

但如果我使用http://www.example.com/apple/(注意最后一个斜杠),那么链接都会搞砸。

如何编写.htaccess所以链接不包括最后一个斜杠而不是搞砸页面上的链接?

更新:我最终使用:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$  /$1 [R=301,L]

2 个答案:

答案 0 :(得分:2)

您可以先使用以下内容删除尾部斜杠:

remove-those-trailing-slashes-from-your-uris

然后在此之后正常处理。

答案 1 :(得分:0)

您应该考虑使用绝对URL路径或绝对URL来引用外部资源。

因为相对URL是从基本URL解析的,所以如果没有另外声明,那就是当前文档的URL(参见BASE HTML element)。因此,如果您仅使用相对网址路径/baz/quux引用baz/quux,则在/baz/quux中使用时,/foo会正确解析/foo/baz/quux,但会将其解析为/foo/bar/baz/quux中使用时。但绝对网址路径/baz/quux始终已解析为{{1}}。