Человеко-понятные URL (ЧПУ) критически важны для SEO и удобства пользователей. Вот профессиональная настройка .htaccess для их реализации.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Исключаем реальные файлы и директории
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Перенаправляем все запросы на index.php
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
</IfModule>
Options +FollowSymLinks -Indexes
RewriteEngine On
# Редирект с www на без www (или наоборот)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
# Редирект с HTTP на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ЧПУ для страниц
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
# Кеширование статики
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
# Категории товаров
RewriteRule ^catalog/([a-z0-9-]+)/?$ catalog.php?category=$1 [NC,L]
# Товары
RewriteRule ^product/([a-z0-9-]+)/([0-9]+)/?$ product.php?slug=$1&id=$2 [NC,L]
# Статьи
RewriteRule ^blog/([0-9]{4})/([0-9]{2})/([a-z0-9-]+)/?$ article.php?year=$1&month=$2&slug=$3 [NC,L]
# Удаление слеша в конце URL
RewriteCond %{REQUEST_URI} /(.*)/$
RewriteRule ^ /%1 [R=301,L]
# Удаление дублирующихся слешей
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]
# Блокировка вредоносных ботов
RewriteCond %{HTTP_USER_AGENT} (badbot1|badbot2) [NC]
RewriteRule .* - [F,L]
# Запрет доступа к скрытым файлам
RewriteRule ^\.git - [F,L]
<?php
// Получаем URL
$url = $_GET['url'] ?? 'home';
// Разбиваем URL на части
$params = explode('/', trim($url, '/'));
// Маршрутизация
$controller = $params[0] ?? 'home';
$action = $params[1] ?? 'index';
$id = $params[2] ?? null;
// Пример обработки
switch ($controller) {
case 'product':
showProduct($action); // $action будет ID продукта
break;
case 'blog':
showBlogPost($action); // $action будет slug поста
break;
default:
showHomePage();
}
Кодировка URL:
Используйте [B]
флаг для автоматического декодирования URL:
RewriteRule ^shop/(.*)$ shop.php?query=%1 [B,NE,L]
Регистр букв:
Флаг [NC]
делает сравнение без учета регистра
Конечные слеши:
Унифицируйте - либо всегда добавляйте, либо всегда удаляйте
Кеширование правил:
Добавьте в начало:
FileETag MTime Size
ExpiresActive On
Используйте онлайн-валидаторы или команду:
curl -I http://yourdomain.com/your-url
mod_rewrite
через RewriteEngine On
[L]
(last), [QSA]
(query string append)Пример полного .htaccess:
https://example.com/htaccess-full-example