Категории
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 только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.