Как перенаправить URL-адреса со строкой запроса на другой хост?

Этот фрагмент 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. Не уверен, почему это не работает...

Я пытался сбежать?

\\? \? [?]

и я пытался избежать /

\\/ \/ [/]

похоже, что ничего из этого не работает...

Помогите!

2 ответа

Решение

Это перенаправит ВСЕ запросы от 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]

Из-за строки запроса "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 и полный запрос сохраняется.

Другие вопросы по тегам