Хук mod_rewrite_rules
в WordPress используется для добавления, изменения или удаления правил перезаписи URL (rewrite rules) в файл .htaccess. Это позволяет гибко управлять редиректами, настройками безопасности и кастомными правилами для улучшения работы сайта.
apply_filters( ‘mod_rewrite_rules’, string $rules )
Хук mod_rewrite_rules
передает список текущих правил перезаписи WordPress, форматированных для использования в .htaccess. Через этот хук можно:
- Добавлять собственные правила перезаписи.
- Настраивать редиректы, такие как 301 редирект с HTTP на HTTPS.
- Включать заголовки безопасности.
- Управлять правилами, которые WordPress добавляет в .htaccess.
Примечание: Изменения, внесенные через этот хук, будут перезаписаны при сбросе правил перезаписи (например, при изменении настроек «Постоянных ссылок» в админке WordPress).
Использование
Для работы с mod_rewrite_rules
нужно создать функцию и прикрепить ее к хуку с помощью add_filter
. Пример базового использования:
add_filter( 'mod_rewrite_rules', 'custom_mod_rewrite_rules' );
function custom_mod_rewrite_rules( $rules ) {
// Ваши правила добавляются к существующим правилам
return $rules;
}
Пример #1: Редирект с HTTP на HTTPS
Добавление правила, которое автоматически перенаправляет всех пользователей с HTTP на HTTPS. Это улучшает безопасность сайта, гарантируя, что все страницы доступны только по защищенному протоколу.
add_filter( 'mod_rewrite_rules', function( $rules ) {
$https_redirect = "\n";
$https_redirect .= "# Редирект с HTTP на HTTPS\n";
$https_redirect .= "<IfModule mod_rewrite.c>\n";
$https_redirect .= "RewriteEngine On\n";
$https_redirect .= "RewriteCond %{HTTPS} off\n";
$https_redirect .= "RewriteCond %{HTTP:X-Forwarded-Proto} !https\n";
$https_redirect .= "RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]\n";
$https_redirect .= "</IfModule>\n";
return $https_redirect . $rules;
} );
После добавления этого кода в файл .htaccess будет добавлено правило для перенаправления всех пользователей на HTTPS.
Пример #2: Добавление Заголовка Безопасности X-Content-Type-Options
Этот пример добавляет заголовок безопасности X-Content-Type-Options
, который предотвращает браузерам выполнение загружаемого контента со страниц сайта. Это помогает избежать возможных XSS-атак.
add_filter( 'mod_rewrite_rules', function( $rules ) {
$security_headers = "\n";
$security_headers .= "# Установка заголовка X-Content-Type-Options\n";
$security_headers .= "<IfModule mod_headers.c>\n";
$security_headers .= "Header always set X-Content-Type-Options \"nosniff\"\n";
$security_headers .= "</IfModule>\n";
return $security_headers . $rules;
} );
С этим кодом WordPress добавит директивы в .htaccess, обеспечивая работу заголовка на всех страницах сайта.
Пример #3: Кастомные Правила для ЧПУ
Можно также добавить индивидуальные правила перезаписи URL для определенных страниц или категорий. В этом примере настраиваем переадресацию всех запросов на /custom-route
к кастомной странице:
add_filter( 'mod_rewrite_rules', function( $rules ) {
$custom_rewrite = "\n";
$custom_rewrite .= "# Кастомное правило перезаписи для /custom-route\n";
$custom_rewrite .= "RewriteRule ^custom-route/?$ /index.php?custom_page=1 [L]\n";
return $custom_rewrite . $rules;
} );
После добавления этого кода запросы к /custom-route
будут перенаправляться на страницу custom_page
.
Пример #4: Создание Маркеров для Дополнительных Настроек
В этом примере добавляем правила через маркеры # BEGIN Custom
и # END Custom
, чтобы лучше структурировать .htaccess.
add_filter( 'mod_rewrite_rules', function( $rules ) {
$custom_block = "\n";
$custom_block .= "# BEGIN Custom\n";
$custom_block .= "<IfModule mod_rewrite.c>\n";
$custom_block .= "RewriteEngine On\n";
$custom_block .= "RewriteRule ^old-page/?$ /new-page/ [R=301,L]\n";
$custom_block .= "</IfModule>\n";
$custom_block .= "# END Custom\n";
return $custom_block . $rules;
} );
Эти правила добавят 301-редирект со старой страницы на новую, упрощая управление редиректами в файле .htaccess.
Пример #5: Защита Файлов в Корневом Каталоге
Этот код добавляет директиву для защиты конфиденциальных файлов, таких как .env, от доступа извне:
add_filter( 'mod_rewrite_rules', function( $rules ) {
$security_restriction = "\n";
$security_restriction .= "# Защита конфиденциальных файлов\n";
$security_restriction .= "<Files \".env\">\n";
$security_restriction .= "Order Allow,Deny\n";
$security_restriction .= "Deny from all\n";
$security_restriction .= "</Files>\n";
return $security_restriction . $rules;
} );
Теперь доступ к файлу .env
и другим конфиденциальным файлам будет закрыт для всех пользователей.
Пример #6: Добавление Кастомного Кода для Кеширования
Используем хук для добавления правил кеширования в .htaccess, что может улучшить производительность сайта, кэшируя статические ресурсы.
add_filter( 'mod_rewrite_rules', function( $rules ) {
$cache_rules = "\n";
$cache_rules .= "# Кеширование статических ресурсов\n";
$cache_rules .= "<IfModule mod_expires.c>\n";
$cache_rules .= "ExpiresActive On\n";
$cache_rules .= "ExpiresByType image/jpg \"access plus 1 month\"\n";
$cache_rules .= "ExpiresByType image/jpeg \"access plus 1 month\"\n";
$cache_rules .= "ExpiresByType image/gif \"access plus 1 month\"\n";
$cache_rules .= "ExpiresByType image/png \"access plus 1 month\"\n";
$cache_rules .= "ExpiresByType text/css \"access plus 1 week\"\n";
$cache_rules .= "ExpiresByType application/javascript \"access plus 1 week\"\n";
$cache_rules .= "</IfModule>\n";
return $cache_rules . $rules;
} );
Этот код активирует кэширование для изображений, CSS и JavaScript файлов, что ускорит загрузку страниц для посетителей.
Заключение
Хук mod_rewrite_rules
— это удобный инструмент для расширенной настройки файла .htaccess в WordPress. Он предоставляет разработчикам возможность добавлять и изменять правила, улучшая безопасность, производительность и пользовательский опыт на сайте.