Rewrite rule + mSearch2

Доброго дня.

Подумал выложить информацию, может кому пригодится (ибо у меня на выяснение причин и устранение ушла неделя).

Итак, у меня на сайте есть замечательный плагин 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 — НЕТ

Вуаля. Дублей нет, поиск работает, все счастливы.
Может данная заметка сэкономит вам время или же спасет от гнева заказчика.
Romancho
30 мая 2015, 08:16
modx.pro
1
1 831
-2

Комментарии: 5

Василий Наумкин
30 мая 2015, 11:42
0
По моему, можно было просто указать у ресурса с поиском свойство «контейнер» — тогда его адрес бы заканчивался на / и ничего больше менять не нужно.
    Romancho
    30 мая 2015, 12:43
    +2
    Попробовал. Не работает. Если просто на / — 0 результатов. Мне кажется тут как раз дело в friendly_urls_strict. Ну и да и бог с ним — работает и это самое главное. А то у меня уже такое ощущение, что я у этого заказчика в штате работаю. :)
    Михаил Божко
    30 мая 2015, 12:59
    0
    Какие-то ненужные пляски с бубном. А редирект для контейнеров можно и плагином реализовать, причём это гораздо универсальней и не зависит от Apache или Nginx.
      Romancho
      30 мая 2015, 18:49
      0
      Научите пожалуйста. Вы имеете ввиду «Redirect»?
      У меня там еще помимо всего прочего почти 2000 301 редиректов 301 со старыми URL на новые.
      с htaccess мне кажется проще, чем с Redirect — меньше действий и времени.
      Очень буду рад информации.
        Михаил Божко
        31 мая 2015, 12:26
        0
        Вешай плагин на событие OnWebPagePrerender, в котором мониторь URL. Если страница имеет статус isfolder (контейнер) и открывается без закрывающего слэша, то редиректи методом $modx->sendRedirect(), если открывается со слэшем на конце, то ничего не делаем.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5