htaccess

12
gormarket
На сайте с 29.12.2010
Offline
47
#11
moonvader:

RewriteRule ^page_1\.html page.php?page_id=1 [L]
RewriteRule ^page_2\.html page.php?page_id=2 [L]
......................
......................
RewriteRule ^page_N\.html page.php?page_id=N [L]

Здесь уже есть логика, и можно решить все одним правилом и для реврайтов (вместо N строк)


RewriteRule ^page_([0-9]+)\.html page.php?page_id=$1 [L]

и одним правилом для редиректов всех страниц:


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} page_id=([0-9]+)
RewriteRule ^page\.php$ http://%{HTTP_HOST}/page_%1.html? [R=301,L]
Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
moonvader
На сайте с 11.10.2011
Offline
10
#12

я привёл неудачный пример(

у меня все страницы выглядят не как page_1.html, а как televizor_sony.html

в этом случае - по три строки на каждый редирект?

gormarket
На сайте с 29.12.2010
Offline
47
#13
moonvader:
в этом случае - по три строки на каждый редирект?

Если у Вас внутренний адрес все-же можно подогнать под некий шаблон, тогда можно попытаться (чтобы сократить количество строк) использовать флаг

'skip|S=количество' (пропустить следующее правило(а))

Тогда первую из трех строк не придется прописывать для каждой страницы.

Не приходилось проверять работоспособность, но где-то так должно быть:


RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule ^page\.php$ -

RewriteCond %{QUERY_STRING} page_id=1
RewriteRule ^page\.php$ http://%{HTTP_HOST}/televizor_sony.html? [R=301,L]
RewriteCond %{QUERY_STRING} page_id=2
RewriteRule ^page\.php$ http://%{HTTP_HOST}/televizor_lg.html? [R=301,L]

есди страница не "page.php" и переменная REDIRECT_STATUS непустая, то будут пропущены следующие 74 правила,

где вместо 74 подставьте количество прописанных ниже страниц (сколько подряд идущих правил пропустить, если адрес соответствует первому из приведенных правил, в приведенном примере вместо 74 нужно подставить 2)

Еще может быть возможно использование директивы RewriteMap для поиски по ассоциированному массиву, но там требуется рестарт сервера после задания массива, я в этом не спец.

Или редирект средствами PHP сделать, через

header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently');

header('Location: http://site.ru/televizor_sony.html');

это уж Вы тоже сами поищите как.

moonvader
На сайте с 11.10.2011
Offline
10
#14

ещё раз - спасибо большое,

данный способ позволяет сэкономить по одной строчке на каждый url

p.s.

про PHPшный редирект всё и так понятно

moonvader добавил 19.10.2011 в 10:18

haccess удобен для редиректа (тут тоже есть про решение проблемы со знаком вопроса)

близко к теме

однако есть ещё метатег canonical. я посмотрел про него в мануале яндекса и вдеоуроках гугла. если нет доступа к haccess, то это самый удобный вариант, хотя удобства canonical нельзя отрицать для случая когда есть страница с товарами и есть ссылки для вывода этих же товаров, но с другой сортировкой - чтобы поисковик не рассматривал страницы как копию, на всех страницах ставится метатег canonical на одну страницу с товарами без сортировки или с сортировкой по умолчанию

12

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