Стандартный .htaccess для WordPress, Joomla, OpenCart и других CMS

Печать
  • 0

Если сайт вдруг выдаёт ошибку 500, уходит в бесконечные перенаправления или показывает 404 на всех страницах, кроме главной, часто виноват повреждённый файл .htaccess. Помогает возврат стандартных правил Вашей CMS. Ниже приведены такие правила для WordPress, Joomla, OpenCart и Битрикс, сказано, откуда взять файл для Drupal, PrestaShop и Magento, и показано, как заменить его в cPanel, не потеряв важных настроек.

Зачем нужен .htaccess и почему он ломается

.htaccess — небольшой текстовый файл в папке сайта, из которого веб-сервер узнаёт, как обрабатывать запросы: превращать понятные адреса в обращения к index.php, перенаправлять на HTTPS, закрывать доступ к отдельным файлам. Правила одинаково работают на Web Hosting SSD (Nginx и Apache) и на WordPress Hosting и Business Hosting, где веб-сервер LiteSpeed читает .htaccess точно так же.

Чаще всего файл ломается в таких случаях:

  • плагин кеширования, защиты или перенаправлений записал правила, которые конфликтуют с другими;
  • файл правили вручную и допустили опечатку;
  • после смены PHP остались старые строки вида php_flag или php_value;
  • сайт взломали, и теперь файл отправляет посетителей на чужой сайт.

Как безопасно заменить файл в cPanel

  1. В cPanel откройте File Manager. Нажмите Settings вверху справа, отметьте Show Hidden Files (dotfiles) и сохраните. Без этого файлы, имя которых начинается с точки, не видны.
  2. Перейдите в папку сайта: public_html для основного домена или папка, выбранная при добавлении домена (она указана в разделе Domains, графа Document Root).
  3. Щёлкните правой кнопкой по .htaccess и переименуйте его в .htaccess.old. Так у Вас останется копия, к которой можно вернуться.
  4. Нажмите + File, назовите файл .htaccess и создайте его. Правой кнопкой откройте Edit, вставьте правила для своей CMS из разделов ниже и нажмите Save Changes.
  5. Откройте сайт в приватном окне браузера и проверьте главную и несколько внутренних страниц.
  6. Найдите в .htaccess.old блоки, которые ещё нужны, и перенесите их в новый файл без изменений (см. следующий раздел). Когда всё работает, старую копию можно удалить.

Что стоит перенести из старого файла

  • Блок PHP от cPanel. Блок с пометкой # php -- BEGIN cPanel-generated handler, do not edit задаёт версию PHP, выбранную в MultiPHP Manager. Без него сайт может заработать на другой версии PHP. Скопируйте его как есть.
  • Перенаправление на HTTPS или www. Если оно было, поставьте его в начало файла или настройте заново по статье Перенаправления с http на https и www через .htaccess.
  • Блок LiteSpeed Cache на WordPress Hosting и Business Hosting. Копировать его не нужно: плагин запишет его снова, когда Вы сохраните его настройки (см. LiteSpeed Cache в WordPress: включение и безопасные настройки).

Строки php_flag и php_value в новый файл не переносите. Параметры PHP меняются в cPanel, как описано в статье Выбор версии PHP.

WordPress

Стандартные правила сайта на WordPress, установленного прямо в корень домена:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Если WordPress лежит в папке, например example.md/blog, укажите RewriteBase /blog/ и RewriteRule . /blog/index.php [L]. Проще всего пересоздать этот блок из самого WordPress: Настройки, затем Постоянные ссылки и кнопка «Сохранить изменения», ничего не меняя. Если внутренние страницы по-прежнему выдают 404, прочитайте Частые проблемы WordPress и как их решить.

Joomla

Полный набор правил Joomla хранится в файле htaccess.txt в папке сайта. Проще всего скопировать его содержимое в .htaccess. Если htaccess.txt удалён, для понятных адресов и базовой защиты хватит основной части:

Options +SymLinksIfOwnerMatch
Options -Indexes
RewriteEngine On
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

Для Joomla в папке добавьте RewriteBase /имя-папки после RewriteEngine On. Чтобы правила применялись, в Joomla в Global Configuration должна быть включена опция Use URL Rewriting.

OpenCart

OpenCart поставляется с правилами в файле .htaccess.txt, и обычно его достаточно просто переименовать. Основная часть выглядит так:

Options -Indexes
RewriteEngine On
RewriteBase /
RewriteRule ^system/storage/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|webp|svg|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

Для магазина в папке замените RewriteBase / на RewriteBase /shop/. Для понятных ссылок также нужно включить Use SEO URLs в настройках магазина (см. Установка OpenCart в cPanel).

1С-Битрикс

Options -Indexes
ErrorDocument 404 /404.php
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine On
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 mod_dir.c>
DirectoryIndex index.php index.html
</IfModule>

В старых файлах Битрикс встречаются строки php_flag (например, allow_call_time_pass_reference). В современных версиях PHP таких настроек нет, а сами строки могут вызвать ошибку 500, поэтому не добавляйте их.

Drupal, PrestaShop и Magento

  • Drupal использует длинный .htaccess, который меняется от версии к версии. Не пишите его вручную: скачайте с drupal.org архив именно Вашей версии и возьмите файл оттуда. Старые примеры с magic_quotes_gpc или register_globals относятся к давно устаревшим версиям PHP.
  • PrestaShop создаёт файл сам. В админке откройте Shop Parameters, затем Traffic & SEO, проверьте, что Friendly URL включён, и сохраните: файл будет записан заново. Подробнее в статье Как установить PrestaShop в cPanel через Softaculous.
  • Magento хранит файлы .htaccess в корне и в папке pub. Берите их из пакета той же версии Magento (см. Установка Magento через Softaculous в cPanel).

Если сайт всё равно не работает

  • Ошибка 500 сразу после сохранения. Чаще всего это строка Options, которую сервер не разрешает, или опечатка. Поставьте # перед строками Options и обновите страницу. Точную причину покажет cPanel, раздел Metrics, затем Errors. См. также Ошибки 500 и 503 на сайте: причины и решения.
  • Файл снова и снова портится. Его перезаписывает плагин, либо сайт заражён. Проверьте и файлы .htaccess во вложенных папках (для WordPress это wp-content и wp-content/uploads) и действуйте по статье На моём сайте вирусы, что делать?
  • Слишком много перенаправлений. Два правила отправляют запрос друг к другу, обычно перенаправление на HTTPS одновременно в плагине и в файле. Оставьте только одно.

Нужна помощь? Откройте тикет, укажите домен и CMS сайта; мы можем сравнить файл с резервной копией.

Полезные статьи

Помог ли вам данный ответ?

Нужна помощь? Позвоните нам +373 795-800-80