如何将带有查询字符串的 URL 重定向到另一个主机?

qod*_*nja 6 .htaccess redirect querystring

这个 htaccess 片段应该重定向

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]
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,我无法逃脱 / 和 ? 网址的一部分。不知道为什么这不起作用......

我试过逃跑吗?

\\? \? [?]
Run Code Online (Sandbox Code Playgroud)

我试过逃避 /

\\/ \/ [/]
Run Code Online (Sandbox Code Playgroud)

这些似乎都不起作用......

帮助!

Laz*_*One 9

这会将所有请求从 myhost.com 重定向到 alt.myhost.com

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

代码取自官方mod_rewrite 手册

如果由于某种原因未保留查询字符串,请将最后一行替换为

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

更新:这会将您的特定 URL 重定向到另一个域:

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


小智 7

由于查询字符串“p=([0-9]+)&preview=true”,我猜您需要重定向是因为在子域上有 wordpress 管理员,在主域上有网站。

因此,您无法预览草稿。

我想出了一个更广泛的解决方案,它也适用于添加参数的自定义帖子类型和插件:

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

在纯英语中,当在查询中找到“preview=true”时,重定向发生在 alt 子域上并保留完整查询。