Стандартный .htaccess для WordPress, Joomla, OpenCart и других CMS
ПечатьЕсли сайт вдруг выдаёт ошибку 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
- В cPanel откройте File Manager. Нажмите Settings вверху справа, отметьте Show Hidden Files (dotfiles) и сохраните. Без этого файлы, имя которых начинается с точки, не видны.
- Перейдите в папку сайта:
public_htmlдля основного домена или папка, выбранная при добавлении домена (она указана в разделе Domains, графа Document Root). - Щёлкните правой кнопкой по
.htaccessи переименуйте его в.htaccess.old. Так у Вас останется копия, к которой можно вернуться. - Нажмите + File, назовите файл
.htaccessи создайте его. Правой кнопкой откройте Edit, вставьте правила для своей CMS из разделов ниже и нажмите Save Changes. - Откройте сайт в приватном окне браузера и проверьте главную и несколько внутренних страниц.
- Найдите в
.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 сайта; мы можем сравнить файл с резервной копией.