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

use*_*217 24 apache .htaccess mod-rewrite redirect rewrite

我将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]

到目前为止运作良好.唯一的缺点是:
它还将"多尾随斜杠"-URL转发非尾随斜杠网址.

示例:
http://example.tld/foo/bar//////转发到http://example.tld/foo/bar
我只想http://example.tld/foo/bar/转发到http://example.tld/foo/bar.

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

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

谢谢.

ale*_*emb 21

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

RewriteRule ^(.*)/+$ $1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*Jon 14

将重写规则更改为:

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

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


sta*_*een 5

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

RedirectMatch ^/(.*?)/$ /$1
Run Code Online (Sandbox Code Playgroud)

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

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


Sjo*_*erd 4

^(.+[^/])/$
Run Code Online (Sandbox Code Playgroud)

即最前面的字符不能是斜杠。