Работа с файлом htaccess.
Работа с htaccess файлом для оптимизатора просто одна из заповедей, но как и ко всему библейскому, тут нужен справочник :)
Собственно это ветка про этот чудо-файл и все касаемо его будет тут дополняться, чтобы потом не искать по всему сайту одну строчку кода.
1. Без www на с www.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domen.ru$ [NC]
RewriteRule ^(.*)$ http://www.domen.ru/$1 [R=301,L]
1.1. C www на без www.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domen\.ru$ [NC]
RewriteRule ^(.*)$ http://domen.ru/$1 [R=301,L]
2. Убираем слеш в конце URL:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
2.2. Добавляем слеш в конце URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
или RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
3. Удаляем в конце URL расширение .html
REWRITECOND %{HTTP_HOST} ^domen.ru [NC]
REDIRECTMATCH 301 (.*)\.html$ http://www.domen.ru$1
4. 301 редирект с http://domen.ru/index.php на http://domen.ru/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://domen.ru/ [R=301,L]
5. 301 редирект с одной директории на другую на одном и том же сайте
RewriteRule ^directory1/directory2/$ /directory1/directory3/ [R=301,L]
6. 301 редирект с одного домена на другой вместе со всеми URL
RewriteCond %{HTTP_HOST} ^(www\.)?domen1\.ru
RewriteRule ^(.*)$ http://domen2.ru/$1 [R=301,L]
7. 301 редирект с одного домена 3-го уровня на другой домен 2-го уровня вместе со всеми URL
RewriteCond %{HTTP_HOST} ^(www\.)?poddomen\.domen1\.ru
RewriteRule ^(.*)$ http://domen2.ru/$1 [R=301,L]
8. 301 редирект с директории без слеша на новую директорию со слешем
RedirectMatch 301 /old_folder/old_folder(.*) /new_folder/new_folder/$1
9. 301 редирект с адреса URL .html на адрес .html
Redirect 301 /news/r-17.html http://sait.ru/news/view/elektronnye_sigarety_denshi_tabaco.html
10. 301 редирект с адреса URL c GET запросом на адрес с .html (С http://sait.ru/index.php?dn=news&to=cat&id=9&Itemid=59 на http://sait.ru/news/view/elektronnye_sigarety_gamucci.html)
RewriteCond %{QUERY_STRING} (?<=(?<=^|&)dn=news)(?=&|$) [NC]
RewriteCond %{QUERY_STRING} (?<=(?<=^|&)to=cat)(?=&|$) [NC]
RewriteCond %{QUERY_STRING} (?<=(?<=^|&)id=9)(?=&|$) [NC]
RewriteCond %{QUERY_STRING} (?<=(?<=^|&)Itemid=59)(?=&|$) [NC]
RewriteRule ^index\.php$ /news/view/elektronnye_sigarety_gamucci.html? [NC,R=301,L]
11. Закрывающий слеш после URL без него, но без слеша, для страниц с окончанием .html
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteRule (.+) $1/ [R=301,L]
12. Подмена одного содержимого URL на другое без изменения в адресной строке mod_rewrite htaccess. Первая часть /stati/poleznye-shtuki/, это адрес URL который будет набран пользователем, вторая часть /poleznoe/ страница, которая отобразится по этому адресу, при этом в адресной строке так и будет /stati/poleznye-shtuki/.
RewriteRule ^stati/poleznye-shtuki/$ /poleznoe/ [P]
Можно показать даже страницу с другого сайта, при этом у пользователя в адресной строке ничего не изменится:
RewriteRule ^stati/poleznye-shtuki/$ http://другойсайт.ru/страница/ [P]
На HTTPS может не работать, это значит, что в настройка сервера на хостинге не указан в VirtualHost 443 порт, а только 80. Тогда нужно обратиться в тех.поддержку, чтобы они добавили или добавляем сами, если это выделенный сервер.
Часто приходится сталкиваться с параметрами mod_rewrite в квадратных скобках. Чтобы раз и навсегда их быстро находить, выделим в отдельную таблицу.
[R] |
Redirect - останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (код 302 - MOVED TEMPORARY), также можно указать код редиректа самостоятельно, например R=301 (код 301 - MOVED PERMANENTLY). |
[F] |
Forbidden - возвращает ошибку 403. |
[G] |
Gone - возвращает ошибку 410. |
[P] |
Proxy - дает команду Apache выполнть подзапрос к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy отсутствует, то произойдет ошибка. |
[L] |
Last - останавливает процесс преобразования, и текущая ссылка считается окончательной. |
[N] |
Next - запускает процесс преобразования с первого по порядку правила. |
[C] |
Chain - объединяет несколько правил в цепочку. Если первое правило цепочки не срабатывает, то вся цепочка игнорируется. |
[NS] |
NoSubreq - разрешает срабатывание правила только для настоящих запросов, игнорируя подзапросы. |
[NC] |
NoCase - отключает проверку регистра символов. |
[QSA] |
Qsappend - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны. |
[PT] |
PassThrough - останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке. |
[S] |
Skip - пропускает следующее правило, если данное правило сработало. Можно указать количество правил, например: S=2 |
[E] |
Env - устанавливает переменную окружения, например: E=переменная:значение. |
Количество показов: 5022