使用动态查询字符串

时间:2017-01-01 10:33:00

标签: .htaccess redirect mod-rewrite dns

我想使用动态查询字符串

将旧域网址重定向到新域

我的htaccess

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^en.olddomain.com$ [OR]
 RewriteCond %{HTTP_HOST} ^www.en.olddomain.com$ [OR]
 RewriteCond %{HTTP_HOST} ^en.olddomain.com/$1$
 RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

它正在将所有带有查询字符串的网址重定向到新网址

但我也想改变查询字符串的模式,如

我的旧网址如

  

http://en.olddomain.com/product?g=any_value

我想将其中一些重定向到

  

http://www.newdomain.com/en/product/any_value/

或其中一些

  

http://www.newdomain.com/en/product/

我在htaccess中添加了这些行以使用动态查询字符串重定向

 RewriteCond %{QUERY_STRING} ^g=(.*)
 RewriteRule ^http://www.newdomain.com/en/product/$1 [R=301,L,NC]

但它不起作用

1 个答案:

答案 0 :(得分:0)

当您使用http主机标头与url路径匹配时,您的上次重写条件始终返回false。要重定向旧域网址并操纵查询字符串,您可以使用以下规则

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteCond %{QUERY_STRING} ^g=([^&]+)$
RewriteRule ^ http://newdomain.com/en/product/%1 [L,R]
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain.com$
RewriteRule (.*) http://newdomain.com/$1 [L,R]