Помогите с правильным .htaccess redirect

G
На сайте с 06.01.2014
Offline
0
1055

Есть сайт с AJAX контентом, для его правильной индексация в Google и Yandex нужно ввести "#!" в конце url страницы, что бы перенаправить бота на хэш-фрагмент с html таблицей всех данных постепенно добавляемых через таблицу с AJAX

url-ы имеют вид:

http://test1.ru/compare/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html
compare.test1.ru/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html
http://test1.ru/compare/search.php?r=ade$da1A$ade$da2A$ade$da3A?_escaped_fragment_=hash1.html
compare.test1.ru/search.php?r=ade$da1A$ade$da2A$ade$da3A?_escaped_fragment_=hash1.html

в .htaccess нужно правило, что бы ссылки с ?_escaped_fragment_= перенаправляло сразу на

и

compare.test1.ru/hash/hash1.html

С сохранением старого url

compare.test1.ru/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html

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

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

Что-то ничего не понятно, с одного адреса перенаправляло на второй, при этом сохранялся третий. В htaccess хэш стринги вроде не обрабатываются если что.

G
На сайте с 06.01.2014
Offline
0
#2
siv1987:
Что-то ничего не понятно, с одного адреса перенаправляло на второй, при этом сохранялся третий. В htaccess хэш стринги вроде не обрабатываются если что.

Это два разных прямых адреса к одной и той же странице на AJAX

1. http://test1.ru/compare/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html

2. compare.test1.ru/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html

а это прямой путь к папке где лежат html страницы с полным контентом что выводиться через AJAX

http://test1.ru/hash/hash1.html

в идеале при заходе паука

compare.test1.ru/search.php?r=ade$da1A$ade$da2A$ade$da3A?_escaped_fragment_=hash1.html
сервер должен отдать страницу, что лежит по адресу
http://test1.ru/hash/hash1.html
siv1987
На сайте с 02.04.2009
Offline
427
#3

Отдать или редиректить, потому что это могут быть две разные вещи.

Редирект

RewriteEngine On

RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+)

RewriteRule ^search\.php http://test1.ru/hash/%1? [R=301,L]

Реврайт, если что, сделайте по аналогии, без R=301 и в зависимости где физически расположен файл http://test1.ru/hash/hash1.html

G
На сайте с 06.01.2014
Offline
0
#4
siv1987:
Отдать или редиректить, потому что это могут быть две разные вещи.

Редирект

RewriteEngine On
RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+)
RewriteRule ^search\.php http://test1.ru/hash/%1? [R=301,L]

Реврайт, если что, сделайте по аналогии, без R=301 и в зависимости где физически расположен файл http://test1.ru/hash/hash1.html

Спасибо, часть подошла, другую доделал через тестер http://htaccess.madewithlove.be/

В идеале вышло

RewriteEngine On

RewriteCond %{QUERY_STRING} _escaped_fragment_=([^&]+)
RewriteRule ^ http://test1.ru/hash/%1? [NC,L]

Вы правы, не правильный речевой оборот написал) Именно отдать страницу (http://test1.ru/hash/hash1.html) с сохранением текущего url (http://test1.ru/compare/search.php?r=ade$da1A$ade$da2A$ade$da3A#!hash1.html) Не подскажите, чем заменить окончание правила?

siv1987
На сайте с 02.04.2009
Offline
427
#5
Groomsha:
В идеале вышло

Редирект со всех урл который содержит указанный параметр не факт что это идеал. Все зависит от задачи, если у вас это только search.php нет смысла ставить на все.

G
На сайте с 06.01.2014
Offline
0
#6
siv1987:
Редирект со всех урл который содержит указанный параметр не факт что это идеал. Все зависит от задачи, если у вас это только search.php нет смысла ставить на все.

Учту - спасибо!

дело в том что в вашем примере url изменяется на http://test1.ru/compare/search.php и тогда нужно добавлять для верности еще одно правило

RewriteRule ^ http://test1.ru/hash/%1? [NC,L]
или я что-то недопонимаю)))

P.S. И все же как сделать что бы url при этом оставался прежним, а контент как теперь уже новый.

На примере как здесь:

http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwFileUpload

Если заменить #! на ?_escaped_fragment_= То смена на странице идет только контента но не адреса.

siv1987
На сайте с 02.04.2009
Offline
427
#7
Groomsha:
дело в том что в вашем примере url изменяется на http://test1.ru/compare/search.php

Это с чего вы это взяли что он так "изминяется"? Из за того, что вы не знаете синтаксис rewrriterule и не потрудились проверить редирект, вы не правильно поняли суть его работы.

Groomsha:
Если заменить #! на ?_escaped_fragment_= То смена на странице идет только контента но не адреса.

Это называется рев райт, а не редирект. Либо внутренний редирект internal redirect. Как его сделать и что для этого нужно уже было написано выше. Зависит от того где у вас физически расположены файлы и как к ним можно получить доступ

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