mod_rewrite примеры использования

Директивы mod_rewrite значительно облегчают жизнь web проекта, во-первых, они берут на себя часть, отвечающую за безопасность — проверка параметров, получаемых через GET, во-вторых, с их помощью можно вставить ключевое слово в URL, что даст плюс в SEO, в-третьих — значительно облегчается индексация сайта за счет сокращения длинных URL, в-четвертых… можно продолжать и продолжать…
Создание ЧПУ-ссылок
ЧПУ (Человеко Понятный Урл) — удобный для восприятия вид адреса страницы.
Один из самый полезных способов использования mod_rewrite. Согласитесь, что http://site.com/news/2002/9/7/ выглядит намного удобнее, чем http://site.com/index.php?show=news&year=2002&month=9&day=7.
Чтобы преобразовать неудобный адрес в ЧПУ, добавим в файл .htaccess следующий код:
1 2 | RewriteEngine On RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$4 |
RewriteRule построено на регулярных выражениях.
Автоматический редирект адреса
Например, попробуйте зайти на адрес http://webmancer.org. Вы автоматически перейдете на //www.webmancer.org. Сделано это для поисковых машин, чтобы для них не было проблем с выбором основного адреса (ведь для поисковых машин webmancer.org и www.webmancer.org — разные адреса)
Чтобы это реализовать, у меня в файле .htaccess добавлено следующее правило:
1 2 3 | RewriteEngine on RewriteCond %{HTTP_HOST} ^lifeinweb.biz$ RewriteRule ^(.*)$ //www.webmancer.org/$1 [NC,R=301,L] |
Во второй строчке указывается адрес, при заходе на который будет включаться 301 редирект, в третей строчке — на какой адрес ведет этот редирект.
Этот способ можно использовать и как обычный редирект с одного сайта на другой.
Создание поддомена
1 2 3 4 | RewriteEngine on RewriteCond %{HTTP_HOST} ^forum.site.com$ [NC] RewriteCond %{REQUEST_URI} !^/forum/$ [NC] RewriteRule (.*) /forum/$1 [L] |
Теперь, при обращении http://forum.site.com будут открываться файлы, находящиеся в папке forum. Этот способ подойдет для тех, у кого хостинг наложил какие-либо запреты на поддомены.
Защита от воровства трафика (хотлинк)
Бывает так, что некоторые вебмастера или просто пользователи интернета, используют ваши изображения и другие весомые файлы на других сайтах, причём сами файлы не переносят к себе на сервер, а просто ссылаются на ваш. Таким образом, доступ к вашим файлам получают на другом сайте, а используют ваш трафик.
Для того, чтобы поставить запрет на использование файлов с других сайтов, добавим в наш .htaccess следующее правило:
1 2 3 4 | RewriteEngine on RewriteBase /images/ RewriteCond %{HTTP_REFERER} !^$ RewriteRule .* - [ F ] |
Теперь, если источник трафика не с вашего сайта, то файл из папки images загружаться не будет. В этом правиле стоит запрет на все типы файлов, но можно поставить запрет и только на определенные:
1 2 3 4 | RewriteEngine on RewriteBase /images/ RewriteCond %{HTTP_REFERER} !^$ RewriteRule .(jpe?g|gif|png)$ - [ F ] |
Теперь, файлы формата jpe, jpeg, gif, png под защитой.
А можно сделать такую подлую штуку:
1 2 3 4 | RewriteEngine On RewriteCond %{REQUEST_URI} /images/ RewriteCond %{HTTP_REFERER} !^.*site.com.*.* [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .* /picture.png [L] |
теперь все изображения доступны только для site.com, а если другие сайты используют изображение им открывается picture.png
Запрет доступа к сайту в рабочее время
1 2 3 4 | RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900 RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800 RewriteRule .* - [ F ] |
Запрет доступа к сайту поисковому роботу Google
Альтернатива директиве disallow в robots.txt:
1 2 3 | RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [F] |
А с помощью этого кода роботу Google будет выдаваться 404 ошибка (вместо 403, как в прошлом коде):
1 2 3 | RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [R=404] |
.html = .htm
Т.к. многие пользователи могут путать расширения .htm и .html в адресах страниц, можно настроить автоматическое исправление ошибок:
1 2 3 | RewriteEngine on RewriteBase / RewriteRule ^(.*).htm$ $1.html [R=permanent] |
Доступ к сайту открыт только поисковым роботам
Бывает так, что на некоторое время появилась необходимость закрыть сайт для посетителей, но при этом не желательно закрывать сайт от поисковых роботов.
1 2 3 4 5 6 7 8 9 10 11 | RewriteEngine on RewriteBase / RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^gaisbot.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR] RewriteCond %{HTTP_USER_AGENT} !^crawler.* [NC,OR] RewriteRule ^/$ - [L,R] |
Используйте этот способ только временно, иначе можно получить санкции от поисковых машин за клоакинг (информация, выдаваемая посетителю и поисковому роботу, различая).
Стандартная переадресация с одной статической страницы на другую
1 | Redirect 301 /was.php http://www.site.ru/new.php |
Ошибка 404
Также можно строго задать страницу 404 ошибка, которую многие подготавливают заранее:
1 | ErrorDocument 404 //www.webmancer.org/404.php |
Настройка переадресации на папки со слешем в конце /
1 2 3 4 | RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301] |
При прямом обращении к файлу result.php, будет отдаваться код 404, это нужно когда ПС проиндексировала страницы, участвующие в редиректах:
1 2 | RewriteCond ^%{THE_REQUEST} result.php RewriteRule .* - [R=404,L] |