MODX htaccess

MODX htaccess MODX Revo

В данном уроке разберемся с правильными настройка файла .htaccess в MODX Revo. Если вы только установили MODX, то в корне сайта лежит файл ht.access, чтобы он заработал, нужно его переименовать в .htaccess.

Внимание! Если у вас 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 %{SERVER_PORT} !^443
#RewriteRule (.*) https://example.com/$1 [R=301,L]

# Перенаправить базовый адрес входа в админку на конкретный домен - не нужно переименовывать файл 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]

Скрытие конфигурационных файлов 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 /

# 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]
#

# 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 %{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 его тоже сделали. И тому подобное

Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
web-revenue.ru
Добавить комментарий