我对此表单的查询是朝向我的服务器:
http://my.host.com/moo?p=1&s=2&targetURL=http://foo.com/sub/more/query
我需要做的是替换此查询的一部分参数,具体而言我需要将http://foo.com/sub/
替换为http://bar.com/
,保留此查询中的所有其他参数并保留参数http://foo.com/sub/more/query
。我会满足于在targetURL
中替换它,所以我尝试了这个:
RewriteCond %{REQUEST_URI} ^/moo
RewriteRule ^/moo(.*)targetURL=http://foo.com/sub(.*)$ http://other.host.com/moo$1targetURL=http://bar.com$2 [L,R]
RewriteRule ^/moo(.*)$ http://other.host.com/moo$1 [L,R]
但第一个查询永远不匹配。有什么帮助吗?
编辑:为了说清楚,我有这个:
http://my.host.com/moo?p=1&s=2&targetURL=http://foo.com/sub/more/query
我希望它成为这个:
http://other.host.com/moo?p=1&s=2&targetURL=http://bar.com/more/query
答案 0 :(得分:1)
试试这个我测试过的版本并为我工作。
<i>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^my\.host\.com/moo [NC,OR]
RewriteCond %{QUERY_STRING} ^p\=1\&s=2\&targetURL\=http\:\/\/foo.com/sub/more/query$ [NC,OR]
RewriteRule ^/(.*) http://other.host.com/moo?p=1&s=2&targetURL=http://bar.com/more/query/$1 [R=301,L]
</IfModule>
答案 1 :(得分:1)
试试这个:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^my\.host\.com [NC]
RewriteCond %{QUERY_STRING} ^(.*)targetURL=http://foo.com/sub/(.*)$
RewriteRule ^/?moo$ http://other.host.com/moo?%1targetURL=http://bar.com/%2 [L,R=301]
您需要使用targetURL=http://foo.com/sub/
匹配%{QUERY_STRING}
变量中的RewriteCond
部分。当RewriteRule
与其匹配时,查询字符串不是URI的一部分。然后,您可以使用%1
和%2
反向引用来引用查询字符串中匹配的分组。