上周我发布了类似问题的内容,而我想知道如何使用.htaccess删除特定页面的尾部斜杠,其余页面将使用尾部斜杠重定向。
abc.com/demo/ should redirect to abc.com/demo
我得到的解决方案如下。
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/demo/ [NC]
RewriteRule ^demo/$ /demo [L,R]
RewriteCond %{REQUEST_URI} !^/demo [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
但现在我需要多个网址。例如。 demo2,demo3,demo4等,所以在那些场景中代码是什么,需要建议。
abc.com/demo2/ redirect to abc.com/demo2
abc.com/demo3/ redirect to abc.com/demo3
abc.com/demo4/ redirect to abc.com/demo4
答案 0 :(得分:1)
要从多个uris中删除traling斜杠,您可以使用一次匹配多个值的正则表达式capture-group,如下所示:
RewriteCond %{REQUEST_URI} ^/(demo1|demo2|demo3|demo4)/$ [NC]
RewriteRule /$ /%1 [L,R]
上述规则中的%1
是一个RewriteCond反向引用,它保存了里面匹配的值
(demo1|demo2|......)
正则表达式模式,即:demo1
。
您可以使用以下htaccess删除并添加traling斜杠。
RewriteEngine on
# remove traling slash from spacifc uris
RewriteCond %{REQUEST_URI} ^/(demo1|demo2|demo3|demo4)/$ [NC]
RewriteRule /$ /%1 [L,R]
# add traling slash to other uris except the spacifc ones
RewriteCond %{REQUEST_URI} !^/(demo1|demo2|demo3|demo4)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301]
确保在测试之前清除浏览器缓存。