如何将URL与查询stringredirect到另一个主机?

这htaccess片段应该redirect

myhost.com/?p=1&preview=true

alt.myhost.com/?p=1&preview=true

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^myhost.com$ [NC] RewriteRule ^/\?p=([0-9]+)&preview=true$ http://alt.myhost.com/?p=$1&preview=true [NC,R=301,L] 

但由于某种原因,我无法逃避/和? url的一部分。 不知道为什么这不工作…

我试过逃跑?

 \\? \? [?] 

我试过逃避/

 \\/ \/ [/] 

这些似乎都没有工作…

帮帮我!

这会将来自myhost.com的所有请求redirect到alt.myhost.com

 RewriteCond %{HTTP_HOST} !^alt\.myhost\.com [NC] RewriteCond %{HTTP_HOST} !^$ RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE] 

代码来自官方的mod_rewrite手册

如果由于某种原因查询string没有得到保存,请将最后一行replace为

 RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE,QSA] 

更新:这将redirect您的特定url到另一个域:

 RewriteCond %{HTTP_HOST} =myhost.com [NC] RewriteCond %{QUERY_STRING} ^(p=1&preview=true) RewriteRule ^$ http://alt.myhost.com/?%1 [R=301,L] 

由于查询string“p =([0-9] +)&preview = true”我想你需要redirect是由于wordpresspipe理员在一个子域和你的主域上的网站。

因此,您无法预览草稿。

我想出了一个更广泛的解决scheme,它也适用于添加参数的自定义posttypes和插件:

 RewriteCond %{HTTP_HOST} =myhost.com [NC] RewriteCond %{QUERY_STRING} (preview=true) RewriteRule ^$ http://alt.myhost.com/?%{QUERY_STRING} [R=301,L] 

用普通英语在查询中发现“预览=真”时,redirect发生在alt子域中,并且保持完整的查询。