[Битрикс] Избавляемся от index.php в адресах

18.04.2017

Убирать из URL-адресов (ссылок)  index.php нужно обязательно, т.к. это все дубли страниц, которые создают проблем в плане SEO и продвижения сайта.

Например, вот эти две страницы на вашем сайте отдают один и тот же контент, что для ПС есть дубль:

/catalog/
/catalog/index.php

Настройка индексной страницы в 1С Битрикс

В Битриксе поможет нам в этом штатная константа BX_DISABLE_INDEX_PAGE, ее описание из официальной документации:

Может принимать значение true/false. Константа регулирует значение по умолчанию для параметра get_index_page функций GetPagePath(), CMain::GetCurPage(), CMain::GetCurPageParam().
Параметр get_index_page указывает, нужно ли для индексной страницы раздела возвращать путь, заканчивающийся на "index.php". Если значение параметра равно true, то возвращается путь с "index.php", иначе - путь, заканчивающийся на "/". Параметр имеет значение, обратное значению константы.

В этом файле
/bitrix/php_interface/dbconn.php

Добавьте эту константу, в любом месте
define("BX_DISABLE_INDEX_PAGE", true);

Все, обновите страницу в публичной части и проверяйте, во всех ссылках должна исчезнуть индексная страница index.php

Если не исчезли, пробуйте сбросить весь кэш, особенно композитный, если не помогло, то могут мешать хитрые следы разрабов или сеошников например в файле urlrewrite.php или еще хоть где.

Так мы исправили проблему в адресах сайта, но это еще не все, если вы напрямую откроете страницу
/catalog/index.php

то она также откроется, никуда не денется, на самом сервере она есть, потому что в предыдущем примере мы убрали индексную страницу только из адресов (ссылок) Битрикса, а сами страницы напрямую открываются по правилам сервера, на сервере тут сложней, разными способами можно избавляться от этого, хоть в знаменитом файле .htaccess хоть в конфигах самого nginx или apache2

301 редирект с /index.php на / в .htaccess

В корне сайта находим файл .htaccess и добавляем в нем запись где-то после RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://example.com/ [R=301,L]

Пример для сайта работающего на защищенном протоколе https:// с 301 редиректом с www на без wwww, только замените в нем адрес example.com на свой, например tuning-soft.ru

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
  RewriteRule ^index\.php$ https://example.com/ [R=301,L]
  RewriteRule ^(.*)=(.*) /$1$2 [L,R=301]
  RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
  RewriteCond %{HTTPS} =off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,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>

301 редирект с /index.php на / в nginx

На каждом сервере пути до конфигов могут быть совершенно разные, но в панели VESTA по умолчанию конфиги в папке пользователя по этому пути
/home/user1254/conf/web/snginx.conf

Для https|ssl  это файл snginx.conf, а для http это файл nginx.conf где в секции server{...} примерно после строки set $php_sock 127.0.0.1:9018; необходимо добавить код ниже и заменить example.com

#301 редирект с www на без www
if ($host = 'www.example.com' ) {
  rewrite ^(.*)$ https://example.com$1 permanent;
}
#301 редирект с index.php на /
if ($request_uri ~* "^(.*/)index\.php$") {
  return 301 $1;
}

Обязательно после изменений конфига nginx его необходимо перезагрузить, делается это, например, в PuTTY по SSH так:
#service nginx restart

Комментарии
Получать ответы на почту
Получать ответы на почту

Разделы
Подписка на статьи
Выберите рассылку
Последние комментарии