MODX htaccess

MODX htaccess MODX Revo

В данном уроке разберемся с правильными настройка файла .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 шаблоны, где их достать (скачать, заказать, купить).

Поделиться с друзьями
Алексей

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

Оцените автора
( 3 оценки, среднее 5 из 5 )
Web-Revenue.ru
Добавить комментарий

  1. Валерий Нистратов

    А есть ли возможность избавиться от дубля вот такого https://web-revenue.ru/? , например?

    Ответить
    1. Голягин Алексей

      RewriteCond %{QUERY_STRING} ^(.*)cmpl=[^&]+(.*)$ [NC]
      RewriteRule ^(.*)$ /$1?%1%2 [R=301,L]

      Ответить
      1. Валерий Нистратов

        Спасибо, тоже сработало. Хостер также помог, вот таким кодом (может у кого он сработает)
        RewriteCond %{THE_REQUEST} ^[^s]+s+[^?]*??
        RewriteCond %{QUERY_STRING} ^$
        RewriteRule .? %{REQUEST_URI}? [R=301,L]

        Ответить
  2. Mayank

    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.

    Ответить