我在.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
答案 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