- Базовый htaccess для MODX Revo (с русскими комментариями)
- Настройка основных правил в htaccess
- Редирект с www на без www
- MODX htaccess https (SSL)
- Склейка дублей главной страницы
- Удаление повторяющихся слешей
- Скрытие конфигурационных файлов MODX
- Использование кеша браузера
- Мой настроенный файл htaccess под хостинг Beget
- Сайт выполнил переадресацию слишком много раз MODX
В данном уроке разберемся с правильными настройка файла .htaccess в MODX Revo. Если вы только установили MODX, то в корне сайта лежит файл ht.access, чтобы он заработал, нужно его переименовать в .htaccess. И переименовывать его нужно либо через FTP, либо через файловый менеджер хостинга. Так же сразу рекомендую переименовать ht.access в директории core. И до кучи удалите из core/docs файл changelog.txt, чтобы убрать ошибку: Каталог ядра в открытом доступе.
Внимание! Если у вас Nginx хостинг без apach (типа modhost.pro), то там не работают правила из htaccess, там вам нужно править конфиги сервера.
Базовый htaccess для MODX Revo (с русскими комментариями)
# MODX поддерживает дружественные URL через этот файл .htaccess.
# У вас должен быть хостинг с Apache и включенным mod_rewrite, чтобы использовать эту функцию
# вы должны изменить имя файла с ht.access на .htaccess.
#
# Убедитесь, что RewriteBase указывает на каталог, в который вы установили MODX.
# Например, "/modx", если ваша установка находится в подкаталоге "modx".
#
# Вы можете сделать ваши URL не чувствительными к регистру, добавив директиву NC
# к вашему правилу: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
RewriteEngine On
RewriteBase /
# Не допускайте, чтобы точечные каталоги (скрытые каталоги, такие как .git) были доступны общественности.
# Исключение: хорошо известный каталог, используемый LetsEncrypt
RewriteRule "/\.|^\.(?!well-known/)" - [F]
# Редирект www.example.com -> example.com -- используется с плагином SEO Strict URLs
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
#RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
#
# или для противоположного
# НЕ ИСПОЛЬЗУЙТЕ ОБА ПРАВИЛА
#
#RewriteCond %{HTTP_HOST} !^$
#RewriteCond %{HTTP_HOST} !^www\. [NC]
#RewriteCond %{HTTP_HOST} (.+)$
#RewriteRule ^(.*)$ https://www.%1/$1 [R=301,L] .
# Правильно переписывайте защищенные запросы для предотвращения предупреждений SSL-сертификатов, например:
# https://www.example.com когда ваш сертификат разрешает только https://secure.example.com
#RewriteCond %{HTTPS} !=on [OR]
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Перенаправить базовый адрес входа в админку на конкретный домен - не нужно переименовывать файл ht.access
# в папке manager, чтобы использовать это правило
#RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
#RewriteCond %{REQUEST_URI} ^/manager [NC]
#RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
# Дружественные URL-адреса
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
# Убедитесь, что файлы .htc обслуживаются с правильным типом MIME, что очень важно
# для XP SP2. Не комментируйте, если ваш хост разрешает переопределения типа htaccess MIME.
#AddType text/x-component .htc
# Если ваш сервер еще не настроен как таковой, следующая директива
# должна быть раскомментирована для установки опции PHP register_globals в OFF.
# Это закрывает большую дыру в безопасности, которой злоупотребляет большинство XSS
# скриптов) атаки. Для получения дополнительной информации: http://php.net/register_globals
#
# Чтобы убедиться, что эта опция отключена, откройте Диспетчер и выберите
# Отчеты -> Информация о системе, а затем нажмите ссылку phpinfo() . Найти на странице
# для "register_globals". Местное значение должно быть ВЫКЛ. Если главное значение
# выключен, тогда вам не нужна эта директива.
#
# IF REGISTER_GLOBALS DIRECTIVE ПРИЧИНА 500 ОШИБКИ ВНУТРЕННЕГО СЕРВЕРА:
#
# Ваш сервер не позволяет устанавливать директивы PHP через .htaccess. В этом
# случае вы должны внести это изменение в ваш файл php.ini. Если ты
# используешь коммерческий веб-хостинг, обратитесь к администраторам за помощью.
# Не все серверы допускают локальные файлы php.ini, и они должны
# включить все конфигурации PHP (не только эту), или вы будете эффективно
# сбросить все до значений по умолчанию PHP. Обратитесь к www.php.net для более подробной информации
# информация о настройке директив PHP.
#php_flag register_globals Off
# Для серверов, которые поддерживают сжатие вывода, вы должны взять немного
# скорости, раскомментируя следующие строки.
#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5
# Следующие директивы останавливают мерцание экрана в IE на ролловерах CSS. Если
# необходимо, раскомментируйте следующие правила. Когда они на месте, вы можете
# выполнить принудительное обновление, чтобы увидеть изменения в ваших проектах.
#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary
Настройка основных правил в htaccess
Для того чтобы базовые правила из стандартного htaccess файла заработали, вам необходимо раскомментировать их (убрать #) и поменять домен на свой — если он указан в правиле
Редирект с www на без www
За редирект домена с www на без www отвечают строки:
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
MODX htaccess https (SSL)
За редирект с http на https отвечают строки
RewriteCond %{SERVER_PORT} !^443
RewriteRule (.*) https://example.com/$1 [R=301,L]
где example.com — ваш домен. Кирилические домены указываем через punycode.
Если данное правило не подходи для вашего хостинга, вам в статью: MODX https настройка.
Не забудьте в настройках модекса указать https.
Склейка дублей главной страницы
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
Удаление повторяющихся слешей
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
Скрытие конфигурационных файлов MODX
RewriteCond %{REQUEST_URI} ^/config.core.php*
RewriteRule ^(.*)$ [R=404]
php_flag display_errors off
Использование кеша браузера
Чтобы браузер сохранял уже загружаемые ресурсы (JS, веб-шрифты, изображения) внесите в htaccess время хранения этих файлов.
<IfModule mod_expires.c>
ExpiresActive on
# Perhaps better to whitelist expires rules? Perhaps.
ExpiresDefault "access plus 1 month"
# cache.appcache needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5)
ExpiresByType text/cache-manifest "access plus 0 seconds"
# html документы
ExpiresByType text/html "access plus 0 seconds"
# data
ExpiresByType text/xml "access plus 0 seconds"
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType application/json "access plus 0 seconds"
# rss feed
ExpiresByType application/rss+xml "access plus 1 hour"
# favicon (cannot be renamed)
ExpiresByType image/x-icon "access plus 1 week"
# media: images, video, audio
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType video/ogg "access plus 1 month"
ExpiresByType audio/ogg "access plus 1 month"
ExpiresByType video/mp4 "access plus 1 month"
ExpiresByType video/webm "access plus 1 month"
# web-шрифты
ExpiresByType font/truetype "access plus 1 month"
ExpiresByType font/opentype "access plus 1 month"
ExpiresByType font/woff "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
# css и javascript
ExpiresByType text/css "access plus 2 months"
ExpiresByType application/javascript "access plus 2 months"
ExpiresByType text/javascript "access plus 2 months"
</IfModule>
Мой настроенный файл htaccess под хостинг Beget
RewriteEngine On
RewriteBase /
# Prevent rewrite the .well-known directory used by LetsEncrypt by rules below of this rule
RewriteRule "^\.well-known/" - [L]
# Prevent dot directories (hidden directories like .git) to be exposed to the public
# Except for the .well-known directory used by LetsEncrypt a.o
RewriteRule "/\.|^\.(?!well-known/)" - [F]
# Rewrite www.example.com -> example.com -- used with SEO Strict URLs plugin
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# Force rewrite to https for every host
#RewriteCond %{HTTPS} !=on [OR]
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
# Склеиваем дубли главной
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
# Удаление повторяющихся слешей
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
# Скрываем конфиг файл
RewriteCond %{REQUEST_URI} ^/config.core.php*
RewriteRule ^(.*)$ [R=404]
php_flag display_errors off
Внимание! На begete и не только на нем, после получения SSL можно сделать перенаправления с http на https средствами хостинга — это я и сделал, поэтому у меня в htaccess нет правил для редиректа с http на https.
Сайт выполнил переадресацию слишком много раз MODX
Данная ошибка может возникать из-за конфликта правил. Например вы использовали сразу 2 правила: 1е склейка домена с www с без www и 2е до кучи склеили домен с без www с www. Либо вы к примеру средствами хостинга сделали редирект на https и еще до кучи в .htaccess его тоже сделали. И тому подобное.
В следующем уроке разберем что такое MODX шаблоны, где их достать (скачать, заказать, купить).
А есть ли возможность избавиться от дубля вот такого https://web-revenue.ru/? , например?
RewriteCond %{QUERY_STRING} ^(.*)cmpl=[^&]+(.*)$ [NC]
RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]
Спасибо, тоже сработало. Хостер также помог, вот таким кодом (может у кого он сработает)
RewriteCond %{THE_REQUEST} ^[^s]+s+[^?]*??
RewriteCond %{QUERY_STRING} ^$
RewriteRule .? %{REQUEST_URI}? [R=301,L]
Please post about modx rest api with blog component like tickets or collections or with Migx CMP. Modx rest APi topic is least in google results.
Thanks
Love from India.