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 следующий код:

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 добавлено следующее правило:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^lifeinweb.biz$
RewriteRule ^(.*)$ //www.webmancer.org/$1 [NC,R=301,L]

Во второй строчке указывается адрес, при заходе на который будет включаться 301 редирект, в третей строчке — на какой адрес ведет этот редирект.

Этот способ можно использовать и как обычный редирект с одного сайта на другой.

Создание поддомена

RewriteEngine on
RewriteCond %{HTTP_HOST} ^forum.site.com$ [NC]
RewriteCond %{REQUEST_URI} !^/forum/$ [NC]
RewriteRule (.*) /forum/$1 [L]

Теперь, при обращении http://forum.site.com будут открываться файлы, находящиеся в папке forum. Этот способ подойдет для тех, у кого хостинг наложил какие-либо запреты на поддомены.

Защита от воровства трафика (хотлинк)

Бывает так, что некоторые вебмастера или просто пользователи интернета, используют ваши изображения и другие весомые файлы на других сайтах, причём сами файлы не переносят к себе на сервер, а просто ссылаются на ваш. Таким образом, доступ к вашим файлам получают на другом сайте, а используют ваш трафик.

Для того, чтобы поставить запрет на использование файлов с других сайтов, добавим в наш .htaccess следующее правило:

RewriteEngine on
RewriteBase /images/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .* - [ F ]

Теперь, если источник трафика не с вашего сайта, то файл из папки images загружаться не будет. В этом правиле стоит запрет на все типы файлов, но можно поставить запрет и только на определенные:

RewriteEngine on
RewriteBase /images/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .(jpe?g|gif|png)$ - [ F ]

Теперь, файлы формата jpe, jpeg, gif, png под защитой.

А можно сделать такую подлую штуку:

RewriteEngine On
RewriteCond %{REQUEST_URI} /images/
RewriteCond %{HTTP_REFERER} !^.*site.com.*.* [NC]
RewriteCond %{HTTP_REFERER} !^$ RewriteRule .* /picture.png [L]

теперь все изображения доступны только для site.com, а если другие сайты используют изображение им открывается picture.png

Запрет доступа к сайту в рабочее время

RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900
RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800
RewriteRule .* - [ F ]

Запрет доступа к сайту поисковому роботу Google

Альтернатива директиве disallow в robots.txt:

RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]

А с помощью этого кода роботу Google будет выдаваться 404 ошибка (вместо 403, как в прошлом коде):

RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [R=404]

.html = .htm

Т.к. многие пользователи могут путать расширения .htm и .html в адресах страниц, можно настроить автоматическое исправление ошибок:

RewriteEngine on
RewriteBase /
RewriteRule ^(.*).htm$ $1.html [R=permanent]

Доступ к сайту открыт только поисковым роботам

Бывает так, что на некоторое время появилась необходимость закрыть сайт для посетителей, но при этом не желательно закрывать сайт от поисковых роботов.

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]

Используйте этот способ только временно, иначе можно получить санкции от поисковых машин за клоакинг (информация, выдаваемая посетителю и поисковому роботу, различая).

Стандартная переадресация с одной статической страницы на другую

Redirect 301 /was.php http://www.site.ru/new.php

Ошибка 404

Также можно строго задать страницу 404 ошибка, которую многие подготавливают заранее:

ErrorDocument 404 //www.webmancer.org/404.php

Настройка переадресации на папки со слешем в конце /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]

При прямом обращении к файлу result.php, будет отдаваться код 404, это нужно когда ПС проиндексировала страницы, участвующие в редиректах:

RewriteCond ^%{THE_REQUEST} result.php
RewriteRule .* - [R=404,L]
Информация
Автор webmancer Нравится 0
Рейтинг 1 Не нравится 0
Голосов 1 Прочитали 1
Дата 2011-12-15 09:00:00 В избранном 0
Ваша реакция

Только авторизованные пользователи могут участвовать в рейтингах, делать заметки и добавлять в избранное.

Зарегистрироваться

Авторизоваться

На рекомендательном сервисе WEBmancer.Org только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.