2013-08-01 4 views
0

OK, сказать, что мой блог-сайт myurl.org, как много ссылок на отдельный домен:Переадресовать макет olddomain querystring в newdomain и новый макет запроса.

old.myurl.org?oldvar=foo 

Только old.myurl.org больше не существует, и был заменен new.myurl.org.

Если строка запроса вары были одинаковыми на new.myurl.org, я полагаю, что я мог бы переписать с .htaccess помощью:

RewirteCond %{http_host} ^old.myurl.org$ [NC] 
RewriteRule ^(.*)$ new.myurl.org [L,R=301,QSA] 

Единственная проблема заключается в том, что мне также нужно изменить строку запроса вар из oldvar в newvar и сохранить его данные (foo).

Существует множество примеров того, как переписывать строки строки запроса по-разному, но я не могу найти пример этого сценария.

мне нужно переписать:

old.myurl.org?oldvar=foo 

To:

new.myurl.org?newvar=foo 

Edit

Кроме того, у меня есть несколько ключевых значений потенциала строки запроса для учета, но не все будет всегда присутствовать.

Так что, возможно, потребуется:

old.myurl.org?oldvar=foo&oldvar2=bar --> new.myurl.org?newvar=foo&newvar2=bar 

или

old.myurl.org?oldvar2=bar --> new.myurl.org?newvar2=bar 

Это не может быть даже возможно, но в одном случае мне нужно сдирать часть значения строки запроса. Таким образом, ?oldvar=foo{term}, возможно, необходимо будет ?newvar=foo

Еще раз спасибо!

ответ

1

Первое условие соответствует доменному, второе условие соответствует строке запроса и правило будет соответствовать ваш корневой домен:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC] 
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$ 
RewriteRule ^$ http://new.myurl.org/?newvar=%1 [R=301,L] 

Вы можете разместить более одной строки запроса, а также:

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC] 
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)$ [OR] 
RewriteCond %{QUERY_STRING} ^oldvar=(\w+)&oldvar2=(\w+)$ 
RewriteRule ^$ http://new.myurl.org/?newvar=%1&newvar2=%2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^old\.myurl\.org$ [NC] 
RewriteCond %{QUERY_STRING} ^oldvar2=(\w+)$ 
RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L] 

Чтобы использовать путь, такой как x/y/z, как вы упоминали в комментарии, вы меняете RewriteRule, например, правило, которое мы используем в настоящее время, будет перенаправляться только с yourdomain.com/?..., а именно:

RewriteRule ^$ http://new.myurl.org/?newvar2=%1 [R=301,L] 

Если вы хотите, чтобы поймать другой путь вы могли бы сделать это:

RewriteRule ^x/?$ http://new.myurl.org/?newvar2=%1 [R=301,L] 

выше ловил yourdomain.com/x?... и yourdomain.com/x/?...

Вы можете иметь более одного пути, а также и использовать OR состояние нравится:

RewriteRule ^(x|x/y|x/y/z)/?$ http://new.myurl.org/?newvar2=%1 [R=301,L] 

Вышеуказанные означает, что мы хотим соответствовать x/?... ИЛИ x?... ИЛИ x/y?... и x/y/?... ИЛИ x/y/z?... ИЛИ x/y/z/?...

Инкапсулируя его на круглые скобки и используя в качестве разделителя | и OR.

^ и $ означают матч от начала до конца, поэтому, когда он не содержит в себе ничего не означает совпадение ничего, что означает корневую папку domain.com/, когда есть содержание будет соответствовать содержанию к примеру domain.com/x или что вы поместите в него.

+0

Спасибо, что помогает. –

+0

@AaronWaller [любезно отмечайте это как правильный ответ, если он решает вашу проблему, см. Здесь как.] (Http://stackoverflow.com/about) – Prix

+0

Вопрос, хотя ... если условие% {QUERY_STRING} не выполнено, будет выполнено правило rewrite по-прежнему применяется переписывание домена? Кроме того, у меня есть несколько потенциальных ключей строки запроса, которые я должен учитывать, ни одна из которых не гарантируется. Я отредактирую исходный вопрос с примера ... –