带有查询参数的apache重写规则

时间:2017-07-12 15:49:26

标签: apache .htaccess url mod-rewrite url-rewriting

我需要使用三个动态参数值重定向现有网址。 我现有的网址如下:

http://localmach.test.it:90/aa/nonLoggedUser.portal?appb=true&event=AppEvent&Code=1.564&mobile=789754654&locale=en

现在我想用相同的参数将其重定向到不同的ip:

http://17.22.11:90/aa/mycare?appb=true&event=AppEvent&Code=1.564&mobile=789754654&locale=en

我在httpd.conf文件中使用apache url redirect。 我可以在没有参数的情况下重定向url,但无法使用参数重定向。

我在httpd.conf中尝试过以下重写,但它无法正常工作

<VirtualHost *:90>
  ServerName localmach.test.it
  RewriteEngine on
  RewriteCond %{QUERY_STRING} ^Code=([0-9]*)&mobile=([0-9]*)&locale=([a-z]*)$
  RewriteRule ^/(.*)(aa/nonLoggedUser.portal?appb=true&event=AppEvent&)(.*)$ http://17.22.11:90/aa/mycare?appb=true&event=AppEvent&Code=%1&mobile=%2&locale=%3$

</VirtualHost> 

请帮忙 提前谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 参数Code不是查询字符串中的第一个,因此^才能赢得匹配
  2. 您无法匹配RewriteRule模式中的查询字符串。
  3. 匹配查询参数的正则表达式也不正确。
  4. 您无法在目标URI中使用正则表达式,因此$会被视为文字$
  5. 您可以使用此重构规则:

    RewriteEngine on
    
    RewriteCond %{QUERY_STRING} (?:^|&)(Code=[^&]*&mobile=[^&]*&locale=[^&]*)(?:&|$) [NC]
    RewriteRule ^/?aa/nonLoggedUser\.portal$ http://17.22.11:90/aa/mycare?appb=true&event=AppEvent&%1 [L,NC,NE,R=301]