Rewrite rule + mSearch2
Доброго дня.
Подумал выложить информацию, может кому пригодится (ибо у меня на выяснение причин и устранение ушла неделя).
Итак, у меня на сайте есть замечательный плагин mSearch2 от Василия Наумкина, ну все его и так наверняка хорошо знают по его отличным дополнениям.
И вот однажды, ни с того ни с сего, форма поиска стала на любые поисковые фразы реагировать исключительно как "Найдено 0 результатов".
Проверил все чанки/настройки и т.п. Снес индекс и проиндексировал заново — результата тоже ноль.
Беда крылась там, где её меньше всего ожидали. Для того чтобы исключить дубли страниц на сайте для поисковых систем (с "/" или без "/") на конце URL в .htaccess было внесено стандартное правило.
Если вы используете mSearch2 и внимательно посмотрите на URL после поиска, то заметите, что после search нет знака /. Но у нас он автоматом проставляется и соответственно ничего не работает.
Не знаю правильно ли я решил задачу, но во всяком случае оно работает именно так как надо.
1) в .htaccess вместо предыдущего правила вставил это:
3) В настройках системы — friendly_urls_strict — НЕТ
Вуаля. Дублей нет, поиск работает, все счастливы.
Может данная заметка сэкономит вам время или же спасет от гнева заказчика.
Подумал выложить информацию, может кому пригодится (ибо у меня на выяснение причин и устранение ушла неделя).
Итак, у меня на сайте есть замечательный плагин mSearch2 от Василия Наумкина, ну все его и так наверняка хорошо знают по его отличным дополнениям.
И вот однажды, ни с того ни с сего, форма поиска стала на любые поисковые фразы реагировать исключительно как "Найдено 0 результатов".
Проверил все чанки/настройки и т.п. Снес индекс и проиндексировал заново — результата тоже ноль.
Беда крылась там, где её меньше всего ожидали. Для того чтобы исключить дубли страниц на сайте для поисковых систем (с "/" или без "/") на конце URL в .htaccess было внесено стандартное правило.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Т.е. любой УРЛ, который бы заканчивался на конце без slug / — закрывался бы. Отлично — от дублей мы избавились, зато получили в поисковом «запросе» URL такого вида: site.com/search/?query=Если вы используете mSearch2 и внимательно посмотрите на URL после поиска, то заметите, что после search нет знака /. Но у нас он автоматом проставляется и соответственно ничего не работает.
Не знаю правильно ли я решил задачу, но во всяком случае оно работает именно так как надо.
1) в .htaccess вместо предыдущего правила вставил это:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1/ [L,QSA]
2) В настройках админки: Типы содержимого -> HTML — Расширение файла /3) В настройках системы — friendly_urls_strict — НЕТ
Вуаля. Дублей нет, поиск работает, все счастливы.
Может данная заметка сэкономит вам время или же спасет от гнева заказчика.
Комментарии: 5
По моему, можно было просто указать у ресурса с поиском свойство «контейнер» — тогда его адрес бы заканчивался на / и ничего больше менять не нужно.
Попробовал. Не работает. Если просто на / — 0 результатов. Мне кажется тут как раз дело в friendly_urls_strict. Ну и да и бог с ним — работает и это самое главное. А то у меня уже такое ощущение, что я у этого заказчика в штате работаю. :)
Какие-то ненужные пляски с бубном. А редирект для контейнеров можно и плагином реализовать, причём это гораздо универсальней и не зависит от Apache или Nginx.
Научите пожалуйста. Вы имеете ввиду «Redirect»?
У меня там еще помимо всего прочего почти 2000 301 редиректов 301 со старыми URL на новые.
с htaccess мне кажется проще, чем с Redirect — меньше действий и времени.
Очень буду рад информации.
У меня там еще помимо всего прочего почти 2000 301 редиректов 301 со старыми URL на новые.
с htaccess мне кажется проще, чем с Redirect — меньше действий и времени.
Очень буду рад информации.
Вешай плагин на событие OnWebPagePrerender, в котором мониторь URL. Если страница имеет статус isfolder (контейнер) и открывается без закрывающего слэша, то редиректи методом $modx->sendRedirect(), если открывается со слэшем на конце, то ничего не делаем.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.