重定向到末尾带有“/”的路径

时间:2014-10-02 15:00:36

标签: regex apache .htaccess mod-rewrite

我在.htaccess文件中使用该设置从/ something重定向到/ something /:

RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301,QSA]

我想为以123.html结尾的网页添加相同的内容

RewriteCond %{REQUEST_URI} [0-9]+\.html$
RewriteRule ^(.*[0-9]+\.html[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301,QSA]

它确实有用......但是!

RewriteCond %{REQUEST_URI} [0-9]+\.html$
RewriteRule ^(.*[0-9]+\.htm.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301,QSA]

这种变体完美无缺!为什么apache不喜欢" l"?谁知道?

Apache版本:2.4.9

1 个答案:

答案 0 :(得分:1)

您尝试不工作的规则是:

RewriteRule ^(.*[0-9]+\.html[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301,QSA]

由于您的正则表达式不正确,因为您的请求URI以.html结尾而.html之后没有任何内容,因此无法正常工作。因此,\.html[^/]与URI不匹配,但\.htm.*[^/]确实匹配,因为最后[^/]匹配字母l

正确的规则将是:

RewriteRule ^(.*[0-9]+\.html)$ http://%{HTTP_HOST}/$1/ [L,R=301]

PS:您也不需要使用RewriteCond