Tramp1357 10 июня 2013 0 3
Добрый день!
Возникла проблема: я переделал сайт на 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
то все работает.

Что может быть?
3 комментария
burick1
burick 10 июня 2013г в 21:36 #
Может в robots.txt прописать это:
Disallow: /*.html
Disallow: /*?q=*
помоему так, посоветуйся еще с кем нибудь
и потом здесь еще webmaster.yandex.ua/delurl.xml можно удалить ненужные ссылки
burick1
burick 10 июня 2013г в 22:08 #
Вот кстати заголовки:
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
Tramp13571
Tramp1357 10 июня 2013г в 23:16 #
Дело в том, что яндекс выдает именно ссылку с .html, и по переходу на нее попадаешь на страницу 404 и в адресной строке
www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html, хотя изначально там переход
www.narcononmsk.ru/syin-narkoman.html, а самой MODX задано
www.narcononmsk.ru/syin-narkoman
Tramp13571
Tramp1357 10 июня 2013г в 23:21 #
старые страницы переходят по редиректу нормально, а вот новые, которые я недавно добавил, глючат. Не может это быть связанно с версией 2.2.8?
Tramp13571
Tramp1357 10 июня 2013г в 23:23 #
www.narcononmsk.ru/syin-narkoman.html вообще не было на сайте, я сразу добавил
www.narcononmsk.ru/syin-narkoman
Fi1osof1
Fi1osof 11 июня 2013г в 06:52 #
Разобрались со своими редиректами? Как я вижу, с .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;
}
Tramp13571
Tramp1357 11 июня 2013г в 09:57 #
Разобрался, спасибо за ответы.

Николай, Вы не могли бы порекомендовать хороший ресурс, желательно русскоязычный, по MODX API?
Мне попадаются либо самые азы, либо дебри, и все как-то разрозненно, по кусочкам.
Я с удовольствием посетил бы Ваши уроки, но в данный момент я сам прохожу программу Нарконон, а выезды у нас не практикуются, поэтому это пока в планах на недалекое будущее, а руки уже чешутся, есть несколько идей, хочется попробовать. Сам я почти 20 лет писал на С++, Delphi, в т.ч. базы данных, немного на Perl. PHP знаю пока поверхностно, но с ним проблем никаких. Хотелось бы почитать что-нибудь последовательное, от простого к сложному, и желательно на русском. Буду очень признателен за ответ.
Fi1osof1
Fi1osof 11 июня 2013г в 11:02 #
Нет, особо посоветовать ничего не могу. Сам во всем разбирался сам, и если где-то и есть что-то, то я просто могу об этом не знать.
А так вот раздел по xPDO есть: community.modx-cms.ru/blog/modx-xpdo/
Там несколько статей, но очень полезные.
Tramp13571
Tramp1357 11 июня 2013г в 16:27 #
Спасибо большое
Fi1osof1
Fi1osof 11 июня 2013г в 16:30 #
Пожалуйста
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.