重定向多个查询字符串

时间:2015-03-10 22:13:54

标签: .htaccess mod-rewrite

我需要使用查询字符串重定向一些网址。 url文件名和查询字符串参数名称会更改,但查询字符串值始终相同。我已经创建了一个适用于单个URL的测试htaccess文件,但是我希望有一个更优雅的方法来更改它,因为我有许多需要更改的URL。

htaccess测试文件

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (^|&)*=0(&|$) [NC]
RewriteRule ^page1\.html$ page1.html?query1=1 [R=301, L, NC]

我有这样的网址:

http://www.example.com/page1.html?query1=0
http://www.example.com/page2.html?query2=0
http://www.example.com/page3.html?query3=0

我需要将其更改为:

http://www.example.com/page1.html?query1=1
http://www.example.com/page2.html?query2=1
http://www.example.com/page3.html?query3=1

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以在此处使用 regex OR运算符。

如果 query1 query2 等只是样本而且实际上是不同的字符串,那么使用

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} (?:^|&)(query1|query2|query3)=0(&|$) [NC]
RewriteRule ^((page1|page2|page3)\.html)$ $1?%1=1 [R=301,NC,L]

如果参数确实有一个公共前缀(查询)后跟一个序数,那么使用

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} (?:^|&)(query[123])=0(&|$) [NC]
RewriteRule ^(page[123]\.html)$ $1?%1=1 [R=301,NC,L]