mod_rewrite:删除尾部斜杠(只有一个!)

时间:2010-06-18 08:20:06

标签: apache .htaccess mod-rewrite redirect rewrite

我将mod_rewrite / .htaccess用于漂亮的网址。

我正在使用这个条件/规则来消除尾部斜杠(或者更确切地说:通过301重定向重写到非尾随斜杠网址;我这样做是为了避免重复内容,因为我喜欢使用URL没有尾随斜杠更好):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^\.localhost$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

目前运作良好。唯一的缺点:
它还将“multiple-trailing-slash”-URLs 转发给非尾随斜杠网址

例:
http://example.tld/foo/bar//////转发http://example.tld/foo/bar 虽然我只希望http://example.tld/foo/bar/转发到http://example.tld/foo/bar

那么,如果它实际只是只有一个尾部斜杠,是否有可能只消除尾部斜杠?

对不起,如果这是一个有点烦人或奇怪的问题!

感谢。

5 个答案:

答案 0 :(得分:20)

以下规则将匹配以斜杠结尾的任何网址,并从其末尾删除所有斜杠:

RewriteRule ^(.*)/+$ $1 [R=301,L]

注意:目前接受的答案仅适用于http而不是https,但这个适用于两者。

答案 1 :(得分:14)

将重写规则更改为:

RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]

英文:匹配字符串的开头,一个或多个任何东西,不是斜线,斜线,结尾。

答案 2 :(得分:4)

^(.+[^/])/$

即。 forelast字符不能是斜线。

答案 3 :(得分:1)

这是一个基于模式别名的解决方案,用于从网址中删除尾部斜杠:

RedirectMatch ^/(.*?)/$ /$1

您可以在htaccess或server.config文件中使用上述重定向。

这会将 / uri / 重定向到* / uri **。

答案 4 :(得分:0)

如果只想从GET请求中删除斜杠,请使用以下内容:

RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)/$ /$1 [L,R=301]