Mod重写附加查询字符串参数,而不是替换

时间:2015-12-10 18:41:49

标签: .htaccess mod-rewrite redirect helicontech

我正在尝试生成涉及一些特定任务的外部重定向。

  1. 如果在网址中找到特定的查询字符串值,则重定向。
  2. 如果重定向,请替换其中一个查询字符串参数名称,而不是其值。
  3. 如果#1为false,则忽略重写并继续
  4. 示例:我有网址http://foobar.com/?a=123&b=456&c=blah

    首先,如果参数c = blah,则重定向到http://barfoo.com/

    其次,将a替换为x参数,以便最终的网址为http://barfoo.com/?x=123&b=456&c=blah

    以下是我在研究http://mod-rewrite-cheatsheet.com/Hidden features of mod_rewrite

    后的最佳猜测
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.foobar\.com$ [NC]
    RewriteCond %{QUERY_STRING} ^a=(.*)&b=(.*)&c=blah$ [NC]
    RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,QSA,R=301]
    

    但是,URL会附加查询字符串,而不是替换。

    我被重定向到http://barfoo.com/?x=123&b=456&c=blah&a=123&b=456&c=blah

1 个答案:

答案 0 :(得分:0)

打了额头

从标记中删除QSA解决了这个问题。 QSA表示"将现有查询字符串附加到当前重写规则。"它会忽略您要添加的任何新查询字符串参数。

我认为需要为重写规则本身提供查询字符串参数。

RewriteRule ^(.*)$ http://barfoo.com/?x=%1&b=%2&c=blah [NC,L,R=301]