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