Александр Марков
10 июня 2013 г., 17:12

Помогите с редиректом!

В блоге Песочница

Добрый день! Возникла проблема: я переделал сайт на MODX revo и назначил новые URL, причем нет ни "/", ни ".html". Яндекс почему-то проиндексировал их с ".html", хотя в командной строке все работает нормально (сайт www.narcononmsk.ru).
Я поискал в инете и нашел рекомендацию поставить редирект
RewriteRule (.*)\.html$ $1 [R=301,L]
Но после этого почему-то получаю такой ответ (причем не на всех страницах): при наборе www.narcononmsk.ru/syin-narkoman.html
получаю в ответ 404 по адресу www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html
а если набрать www.narcononmsk.ru/syin-narkoman то все работает.
Что может быть?
Может в robots.txt прописать это: Disallow: /*.html Disallow: /*?q=* помоему так, посоветуйся еще с кем нибудь и потом здесь еще webmaster.yandex.ua/delurl.xml можно удалить ненужные ссылки
Вот кстати заголовки: — www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html
GET /syin-narkoman?q=syin-narkoman.html HTTP/1.1 Host: www.narcononmsk.ru User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru Accept-Encoding: gzip, deflate DNT: 1 Cookie: PHPSESSID=c70e8b113ff631 Connection: keep-alive Cache-Control: max-age=0
HTTP/1.1 200 OK Server: nginx/1.1.0 Date: Mon, 10 Jun 2013 17:46:47 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Keep-Alive: timeout=30 X-Powered-By: PHP/5.2.17 Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache X-XFPC-Cache-Active: Yes X-XFPC-Cache: Hit Content-Encoding: gzip Vary: Accept-Encoding Content-Length: 6161
Здесь код 200 т.е. если добавить в удалялку ссылок яндекса то он ее не удалит потому что ответ сервера 200 а нужно 400 Я имею ввиду что яндекс из поиска удалит ссылки которые действительно отдают ошибку 404
Дело в том, что яндекс выдает именно ссылку с .html, и по переходу на нее попадаешь на страницу 404 и в адресной строке www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html, хотя изначально там переход www.narcononmsk.ru/syin-narkoman.html, а самой MODX задано www.narcononmsk.ru/syin-narkoman
старые страницы переходят по редиректу нормально, а вот новые, которые я недавно добавил, глючат. Не может это быть связанно с версией 2.2.8?
Разобрались со своими редиректами? Как я вижу, с .html нормально редирект идет.
www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html, хотя изначально там переход
Здесь у вас чуть сложнее будет. Вы настроили серверные правила редиректа. То есть при обращении к страницам с .html, дело до MODX-а еще не доходит. Сервер видит запрос к документу с суффиксом .html и редиректит по правилу. Далее уже вступает в дело MODX. Но это правило анализирует имя файла, к которому идет запрос, а не параметры. В запросе www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html syin-narkoman.html — не имя файла, а значение переменной q. Сервер его не проверяет и не редиректит. То есть он отдает запрос MODX-у. Но q — это зарезервированная переменная MODX-а, которую он использует для определения запрошенного документа, и хотя у вас запрошена страница syin-narkoman, которая для MODX-а по сути имеется, переменная q перебивает этот адрес, заставляя MODX думать, что запрошена страница syin-narkoman.html. Но этой страницы для MODX-а не имеется (вы сами у себя удалили суффиксы .html). Про правила редиректа на стороне веб-сервера MODX ничего не знает, и совершенно их не использует, а отдает законную 404-ую в ответ на ненайденную страницу.
Резюме: безусловно надо еще перестраховываться с редиректами на стороне самого MODX-а. Создайте плагин на событие OnPageNotFound, и настройте те же правила на регулярках, только на php, используя переменную $modx->resourceIdentifier и метод $modx->sendRedirect($url);
Примерный код плагина:
if(!empty($modx->resource) && is_object($modx->resource)){ return; } if(preg_match('/(.+)\.html([\?\#$]?.*)/', $modx->resourceIdentifier, $match)){ $modx->sendRedirect("{$1}{$2}"); return; }
Разобрался, спасибо за ответы.
Николай, Вы не могли бы порекомендовать хороший ресурс, желательно русскоязычный, по MODX API? Мне попадаются либо самые азы, либо дебри, и все как-то разрозненно, по кусочкам. Я с удовольствием посетил бы Ваши уроки, но в данный момент я сам прохожу программу Нарконон, а выезды у нас не практикуются, поэтому это пока в планах на недалекое будущее, а руки уже чешутся, есть несколько идей, хочется попробовать. Сам я почти 20 лет писал на С++, Delphi, в т.ч. базы данных, немного на Perl. PHP знаю пока поверхностно, но с ним проблем никаких. Хотелось бы почитать что-нибудь последовательное, от простого к сложному, и желательно на русском. Буду очень признателен за ответ.
Нет, особо посоветовать ничего не могу. Сам во всем разбирался сам, и если где-то и есть что-то, то я просто могу об этом не знать. А так вот раздел по xPDO есть: community.modx-cms.ru/blog/modx-xpdo/ Там несколько статей, но очень полезные.

Добавить комментарий