Оптимальный htaccess для Cms Bitrix

В каждой CMS системе есть свои особенности, свои плюсы и минусы. В 1C-Bitrix, также есть куча своих нюансов, об одном из них расскажу.

Избавляемся от дублей в Битрикс

Речь идет про Apache, или Apache/Nginx, и работу через файл htaccess. Бывают разные ситуации, когда не все редиректы отрабатывают или «ложится» админка и т.д. Здесь рассмотрен пример в котором ВСЕ работает (или пока что работает 🙂 ).

Какие дубли убираем

  1. дубли слеша на конце урлов — принудительно добавляем
  2. дубли главного зеркала — принудительно на non-www
  3. дубли с /index.php при просмотре с главной
  4. дубли с /index.php при попытке открыть такой урл с внутренних страниц. Например site.com/index.php/services/qa
  5. дубли вида site.com/alias/index.php
  6. дубли .html в конце урла — принудительно «отрезаем»

Собственно сам htaccess

< IfModule mod_rewrite.c >
Options +FollowSymLinks
RewriteEngine On
#добавляет слэш в конец
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
#редирект на без www
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
#редирект с /index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.com/ [R=301,L]
#редирект с внутренних /index.php
RewriteCond %{REQUEST_URI} ^/index.php/(.*)$
RewriteRule (index.php)/(.*) http://site.com/$2 [R=permanent,L]
#убирает .html со всех урлов
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.html [NC]
RewriteRule ^ /%1/ [R=301,L]
#убирает /index.php в конце алиаса
RewriteRule ^(.*)index\.php$ $1 [R=301,L]
#стандартный набор Битрикс
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]
< / IfModule >

Использовать нужно только так (в таком порядке) как тут написано!

Это все дело обернуто в стандартную конструкцию «IfModule» — по умолчанию.

Схожая статья — основные редиректы, с чего начать?

И напоследок — небольшой совет ↓

Если Вы не очень поняли, что написано выше, или самостоятельно не получается избавится от дублей в Битрикс — не переживайте!
Вам поможет простой и удобный инструмент для управления редиректами в Битрикс, рекомендую установить модуль Редирект Мастер.

В нем можно удобно:

  • создать редиректы через админку,
  • загрузить их из Excel,
  • сгенерировать редиректы при изменения ЧПУ,
  • настроить их автоматическое создание.

Более полый перечень функций можно посмотреть на официальном сайте разработчика: atlant2010.ru
Модуль доступен в Маркетплейс 1С-Битрикс.

9 replies on “ Оптимальный htaccess для Cms Bitrix ”
  1. #редирект с внутренних /index.php
    не работает
    происходит редирект на
    site.com/vnetrenya/index.php/

    1. Все должно работать, возможно где-то допустили ошибку, перепроверьте еще раз. Как вариант, можно пробовать менять местами регулярки, например, сначала выполнить редирект с index.php, а после (ниже) — выполнять редирект слэша..

  2. Max, хорошие рекомендации, спасибо.

    Для полного счастья было бы неплохо исправить пару ошибок, неочевидных — и потому неприятных, особенно тем, кто сделал простой copy/paste

    1) #убирает /index.php в конце алиаса
    RewriteRule ^(.*)index\.php$ $1 [R=301,L]
    я бы записал эту строку так (перед index добавил /)
    RewriteRule ^(.*)/index\.php$ $1 [R=301,L]

    2) в строке
    RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]
    очень уж подозрительный дефис, лучше перебить его обычным символом «минус»
    RewriteRule .* — [E=REMOTE_USER:%{HTTP:Authorization}]

    1. Спасибо за рекомендации, Сергей! Возможно это правильнее, но я делал так, как написано, и у меня все отрабатывало 🙂

      1. Max, не сомневаюсь, что отработает. До первых «граблей» в виде url, содержащего фразу index.php, как часть имени скрипта типа search_reindex.php. В итоге получим проблему, например в админке:

        — так должно быть
        site.my/bitrix/admin/search_reindex.php/?lang=ru

        — так получится, фраза index.php честно вырезана из url
        site.my/bitrix/admin/search_re/?lang=ru

        К чему это приведет — догадаться несложно.

        В качестве альтернативы можно отменить действие всех правил редиректа для админки битрикс, но это еще пара дополнительных строк в .htaccess.

    2. 1) все равно не отрабатывает правильно, нужно писать исключение:
      RewriteCond %{REQUEST_URI} !^/bitrix/
      или любой другой на ваше усмотрение

  3. вдогонку…

    хотя, судя по моему предыдущему опубликованному комментарию, по поводу дефиса — это проблемы сайта, при публикации обычный «минус» меняется на нечто похожее, с кодом #x97

  4. А как сделать редирект на www?
    Чтобы был адрес вида https://www.site.ru, даже если набирают адрес без ввв и без хттпС
    (переход на httpS осуществлен)

    1. Попробуйте в начале (до https правил) добавить это:

      Options +FollowSymLinks
      RewriteEngine On
      RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
      RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

      проверьте через bertal все варианты с ввв, без, индекс пхп и т.д., если что-то легло, то попробуйте перенести регулярку

      RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
      RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

      после правил https

      p.s. и не забудьте проверить админку после всех манипуляций

      тут больше написано — http://max-levsha.by/bazovye-nastrojki-htaccess/

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

Ваш e-mail не будет опубликован.