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

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

Создание ЧПУ-ссылок

ЧПУ (ЧеловекоПонятный Урл) — удобный для восприятия вид адреса страницы.

Один из самый полезных способов использования mod_rewrite. Согласитесь, что http://localhost/news/2002/9/7/ выглядит намного удобнее, чем http://localhost/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://4webmaster.ru. Вы автоматически перейдете на http://www.4webmaster.ru. Сделано это для поисковых машин, чтобы для них не было проблем с выбором основного адреса (ведь для поисковых машин 4webmaster.ru и www.4webmaster.ru — разные адреса)

Чтобы это реализовать, у меня файл .htaccess выглядит следующим образом:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^4webmaster.ru$
RewriteRule ^(.*)$ http://www.4webmaster.ru/$1 [NC,R=301,L]

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

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

Создание субдомена

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

Теперь, при обращении http://forum.site.ru будет открываться файлы, находящиеся в папке «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 %{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]

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

http://www.4webmaster.ru/

Рекомендуем почитать:
ModRewrite в помощь usability
Нечитаемый шрифт WP-Polls и WP-PostRatings в IE
Генератор паролей


13 комментариев

  1. Eugene 17.09.2009

    >> Защита от воровства трафика (хотлинк) есть домены 111 и 222 все изображения находятся в домене 222 (сервер), а отображены в домене 111 (хостинг)

    а как сделать так, что бы изображения расположенные на домене 222 были доступны только домену 111?

  2. Cергей 26.09.2009

    Eugene, если у вас cpanel, то там есть в настройках возможность указать адреса, с которых будет доступны файлы

  3. Eugene 27.09.2009

    Я сделал это так:

    RewriteEngine On

    RewriteCond %{REQUEST_URI} /images/

    RewriteCond %{HTTP_REFERER} !^.*domen1\.*.* [NC]

    RewriteCond %{HTTP_REFERER} !^$

    RewriteRule .* /picture.png [L]

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

  4. Sergey 30.10.2009

    «Создание субдомена» это работает только на локальном компе :(

  5. Eugene 31.10.2009

    Создание субдомена еще может зависеть от хостинга:)

  6. Amadey 12.02.2010

    Возник вопрос. у себя на сайте в целях проверки решил сделать дружественный URL к странице altermuz.ru/view_mus.php?id=45

    код :

    RewriteRule ^poltora.html /view_mus.php?id=45

    теперь если в браузере ввести

    www.altermuz.ru/poltora.html

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

    думаю что может потомучто в php коте ссылка у меня генерируется следующим образом:

    где %s это данные из БД. но если проблема в этом то как тогдабыть ???

    помогите плиз.

  7. Дима 25.05.2010

    А нельзя привести побольше примеров про обрезку ссылок

  8. Дима 27.06.2010

    вот меня интересует один момент ... вроде мод реврайт включён в апаче , вроде пишу всё ровно , но неработает

    Пример ...

    RewriteEngine On

    RewriteRule ^http://test1.ru/([a-z]+).html$ test1.ru/index.php?op=coments

    ещё пробывал

    RewriteEngine On

    RewriteRule ^([a-z]+).html$ /?op=coments

    даже так пробывал

    RewriteEngine On

    RewriteRule ^([a-z]+).html$ /index.php?op=coments

    и так ...

    RewriteEngine On

    RewriteRule ^([a-z]+)/([a-z]+).html$ /index.php?op=coments

    вобщем кто знает напишите

  9. Дима 27.06.2010

    Я вот вобщем немного разобрался вроде я когда делаю так ...

    RewriteEngine On

    RewriteRule ^pivet.html /index.php?op=coments

    то когда ввожу pivet.html то работает , и как мне сделать так чтоб когда я вводил /index.php?op=coments то выводил pivet.html ????

  10. sergey 01.11.2010

    У меня та же проблема — когда ввожу pivet.html то работает , и как мне сделать так чтоб когда я вводил /index.php?op=coments то выводил pivet.html ????

    но ответа нет... и это сайт «в помощь вебмастеру» ???

  11. Анатолий 12.12.2010

    если еще актуально [L,QSA]

    RewriteEngine on

    RewriteRule ^privet.html$ index.php?op=coments [L,QSA]

    даст то что требуется

  12. Алекс 02.01.2011

    Всех с НОВЫМ ГОДОМ!

    Подскажите плиз как правильно сократить ссилки вида- www.xxx.com.ua/shop/catalog/index.php

    на www.xxx.com.ua/index.php

    Тоесть убрать shop/catalog/

  13. Diman777 10.11.2011

    Спасибо за данную статью очень помогло.

Оставить комментарий: