我将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
。
那么,如果它实际只是只有一个尾部斜杠,是否有可能只消除尾部斜杠?
对不起,如果这是一个有点烦人或奇怪的问题!
感谢。
答案 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]