0

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

  1. 如果在 URL 中找到特定的查询字符串值,则重定向。
  2. 如果重定向,请替换查询字符串参数名称之一,而不是其值。
  3. 如果#1 为假,则忽略重写并继续

示例:我有网址http://foobar.com/?a=123&b=456&c=blah

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

其次,ax参数替换,所以最终的 URL 是http://barfoo.com/?x=123&b=456&c=blah

以下是我在研究http://mod-rewrite-cheatsheet.com/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

4

1 回答 1

0

捶着额头

QSA从标志中删除解决了这个问题。QSA意思是“将现有的查询字符串附加到当前的重写规则”。它会忽略您添加的任何新查询字符串参数。

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

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

于 2015-12-10T18:57:44.813 回答