首页 文章

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

提问于
浏览
23

我将mod_rewrite / .htaccess用于漂亮的URL .

我正在使用这个条件/规则来消除尾部斜杠(或者更确切地说:通过301重定向重写到非尾部斜杠URL;我这样做是为了避免重复内容,因为我喜欢不带尾随斜杠的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" -URL转发给非尾随斜杠网址 .

例:
http://example.tld/foo/bar////// 前往 http://example.tld/foo/bar
虽然我只想 http://example.tld/foo/bar/ 转发到 http://example.tld/foo/bar .

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

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

谢谢 .

4 回答

  • 4

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

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

    注意:当前接受的答案仅适用于http而非https,但这一个适用于两者 .

  • 14

    将重写规则更改为:

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

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

  • 1
    ^(.+[^/])/$
    

    即forelast字符不能是斜线 .

  • 19

    这是一个基于mod-alias的解决方案,用于从URL中删除尾部斜杠:

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

    您可以在htaccess或server.config文件中使用上述Redirect .

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

相关问题