.htaccess: 301-й редирект на другой домен с сохранением GET-параметров

linkfarm
На сайте с 07.04.2011
Offline
32
6024

Здравствуйте, уважаемые специалисты по RegEx, .htaccess и RewriteEngine.

Возникла необходимость перенапрявлять несуществующие (кроме en, pda, m, mobile) региональные поддомены переводчику google, прописав в .htaccess правила для основных языков. По этим поддоменам есть небольшой входящий траф, но он весь сейчас идёт на русскоязычную главную, при условии, что в настройках сервера все (*) поддомены разрешены.

Для попытки попробовать встретить пользователя на его языке, в .htaccess прописано правило, например для UA:


Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ua.logistic.ru
RewriteRule (.*) http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/$1 [R=301,L]

Проблема в том, что такое правило перенаправляет в GET гуглу всё, влоть до пути по сайту, но отбрасывает так необходимый GET, например такой документ:

меняем поддомен www на ua, и в гугл попадает только

Пожалуйста, помогите составить правильное правило, чтобы в GET переводчику попадал полный адрес документа, и с путями до файла, и со всеми GET-параметрами.

Заранее спасибо!

ValdisRu
На сайте с 02.10.2006
Offline
139
#1

дело в том, вам надо сделать Escape преобразование вашего урла, чтобы его понял переводчик гугла, т.е. чтобы знак вопроса (?) стал %3F (возможно в ваших урлах встречается еще и ампесанд то его также надо заменить на %26 а если быть совсем строгим то слеш / надо заменять на %2F - хотя это в принципе и не обязательно)

итак с вашим случаем я раньше не сталкивался, но вот сейчас посмотрел в инете, короче вот что нарыл - http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_b

а если короче, то там написано что для Escape преобразование нужно использовать флаг B т.е. у вас по идее должно быть как то так

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{HTTP_HOST} ua.logistic.ru
RewriteRule (.*) http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/$1 [R=301,L,B]

вообщем пробуйте, по идее должно получится, но я не проверял

Обалденный заработок на социальных сетях (https://goo.gl/Qtsq6M)
linkfarm
На сайте с 07.04.2011
Offline
32
#2
ValdisRu:
вообщем пробуйте, по идее должно получится, но я не проверял

Спасибо, но [R=301,L,B] не проканало:

Адресная строка: http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/news%252fnews.php

Строка к переводу: http://logistic.ru/news%2Fnews.php

Ответ Гулла: Not Found

The requested URL / news / news.php was not found on this server.

Всё таки у меня сильное ощущение, что локальный GET туда просто не доставляется,

ведь из командной строки гугл понимает всё хорошо и без Escape-последовательностей,

вот пример как должно по идее быть (рабочая ссылка):

euhenio
На сайте с 21.09.2001
Offline
357
#3

попробуйте заменить

RewriteRule (.*) http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/$1?{%QUERY_STRING} [R=301,L]

или

RewriteRule (.*) http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/$1%3F{%QUERY_STRING} [R=301,L]

с ув., Евгений Трофименко seo блог Trofimenko.ru ( http://trofimenko.ru/ ) но ыыы мало обновляется... Tools.Promosite.ru - анализатор апдейтов Яндекса (пожертвуйте лимиты на Яндекс.XML! ( https://searchengines.guru/ru/forum/801888/page7#comment_11942489 )) Konvr.ru - увеличение конверсии сайта на 81% за 4 недели ( http://konvr.ru/ )
siv1987
На сайте с 02.04.2009
Offline
427
#4

RewriteEngine On

RewriteCond %{HTTP_HOST} ua.logistic.ru

RewriteRule (.*) http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/$1 [R=301,L,QSA]

linkfarm
На сайте с 07.04.2011
Offline
32
#5
siv1987:
[R=301,L,QSA]

Спасибо, уже намного лучше! ) Вот результирующий url:

http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru/news/news.php&num=2012/10/03/18/11185410

Осталась одна маленькая проблема: ...news.php&num... поменять на news.php?num и всё тогда заработает!

siv1987
На сайте с 02.04.2009
Offline
427
#6

А тут через htaccess кажется никак. Сделайте реврайт на какой нибудь файл-обработчик и оттуда редиректите на нужный адрес.

RewriteEngine On

RewriteCond %{HTTP_HOST} ua.logistic.ru

RewriteRule (.*) han.php [L]

<?php

header( "Location: http://translate.google.com/translate?sl=ru&tl=uk&u=logistic.ru{$_SERVER['REQUEST_URI']}", true, 301 );

exit;

?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий