.htaccess使用HTTP_HOST和QUERY_STRING重写

时间:2013-10-03 17:49:42

标签: php .htaccess

我想设置一个带有查询字符串的新主机的重定向。我正在努力将查询添加到目标网址的末尾。这是我的示例旧网址

http://sub.oldexample.com/folder1/page1?value=ABC123

我想转到

http://newexample.com/folder3/page6?value=ABC123

如果不涉及query,我没有问题,例如以下代码完美无缺,但不适合

RewriteCond %{HTTP_HOST} ^sub.oldexample.com$ 
RewriteRule ^folder1/([A-Za-z][A-Za-z][A-Za-z][0-9][0-9][0-9])$ http://newexample.com/folder3/$1 [L,R=301,NC]

我试图包含query条件,但它失败了

RewriteCond %{HTTP_HOST} ^sub.oldexample.com$ [NC]
RewriteCond %{QUERY_STRING} ^(value=ABC123)
RewriteRule ^$ http://newexample.com/folder3/page6?%1 [L,R=301,NC]

我发现以下链接是测试.htaccess规则的完美环境,因为它提供了生成的输出网址

http://htaccess.madewithlove.be/

2 个答案:

答案 0 :(得分:1)

以下规则适合您:

RewriteCond %{HTTP_HOST} ^sub\.oldexample\.com$ [NC]
RewriteCond %{QUERY_STRING} (^|&)value=ABC123(&|$) [NC]
RewriteRule ^folder1/page1/?$ http://newexample.com/folder3/page6 [L,R=301,NC]

您无需复制QUERY_STRING,因为它会自动转移到新网址。

答案 1 :(得分:0)

试试这个:

RewriteCond %{HTTP_HOST} ^sub.oldexample.com$ [NC]
RewriteCond %{QUERY_STRING} (.+)=(.+)
RewriteRule ^/?folder1/page1$ http://newexample.com/folder3/page6 [QSA,R=301]

尝试使用[QSA]标记。