使用.htaccess删除多个网址

时间:2018-05-31 09:30:18

标签: .htaccess

上周我发布了类似问题的内容,而我想知道如何使用.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

1 个答案:

答案 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]

确保在测试之前清除浏览器缓存。