Назад | Перейти на главную страницу

Как вы перенаправляете 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-адреса. Не уверен, почему это не работает ...

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

\\? \? [?]

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

\\/ \/ [/]

ни один из них, похоже, тоже не работает ...

Помогите!

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