此 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]
但出于某种原因,我无法转义 URL 中的 / 和 ? 部分。不确定为什么这不起作用...
我试过逃跑?
\\? \? [?]
我尝试过逃避 /
\\/ \/ [/]
这些似乎都不起作用......
帮助!
答案1
这会将所有请求从 myhost.com 重定向到 alt.myhost.com
RewriteCond %{HTTP_HOST} !^alt\.myhost\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE]
代码取自官方mod_rewrite 手册
如果无论出于什么原因查询字符串没有被保留,将最后一行替换为
RewriteRule ^/?(.*) http://alt.myhost.com/$1 [L,R,NE,QSA]
更新:这会将您的特定 URL 重定向到另一个域:
RewriteCond %{HTTP_HOST} =myhost.com [NC]
RewriteCond %{QUERY_STRING} ^(p=1&preview=true)
RewriteRule ^$ http://alt.myhost.com/?%1 [R=301,L]
答案2
由于查询字符串“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]
用简单的英语来说,当在查询中发现“preview=true”时,重定向会发生到 alt 子域并且保留完整的查询。