В этой статье вы сможете увидеть на примерах как использование модуля 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]
Используйте этот способ только временно, иначе можно получить санкции от поисковых машин за клоакинг (информация, выдаваемая посетителю и поисковому роботу, различая).
Рекомендуем почитать:
• ModRewrite в помощь usability
• Нечитаемый шрифт WP-Polls и WP-PostRatings в IE
• Генератор паролей
13 комментариев
>> Защита от воровства трафика (хотлинк) есть домены 111 и 222 все изображения находятся в домене 222 (сервер), а отображены в домене 111 (хостинг)
а как сделать так, что бы изображения расположенные на домене 222 были доступны только домену 111?
Eugene, если у вас cpanel, то там есть в настройках возможность указать адреса, с которых будет доступны файлы
Я сделал это так:
RewriteEngine On
RewriteCond %{REQUEST_URI} /images/
RewriteCond %{HTTP_REFERER} !^.*domen1\.*.* [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .* /picture.png [L]
т.е. все изображения доступны только для domen1, а если другие сайты используют изображение им открывается picture.png
«Создание субдомена» это работает только на локальном компе
Создание субдомена еще может зависеть от хостинга:)
Возник вопрос. у себя на сайте в целях проверки решил сделать дружественный URL к страницеaltermuz.ru/view_mus.php?id=45
код :
RewriteRule ^poltora.html /view_mus.php?id=45
теперь если в браузере ввести
действительно откроется эта же страница, но не наоборот (((( то есть ссылка не подменяется налету . с чем это может быть связано ???
думаю что может потомучто в php коте ссылка у меня генерируется следующим образом:
где %s это данные из БД. но если проблема в этом то как тогдабыть ???
помогите плиз.
А нельзя привести побольше примеров про обрезку ссылок
вот меня интересует один момент ... вроде мод реврайт включён в апаче , вроде пишу всё ровно , но неработает
Пример ...
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
вобщем кто знает напишите
Я вот вобщем немного разобрался вроде я когда делаю так ...
RewriteEngine On
RewriteRule ^pivet.html /index.php?op=coments
то когда ввожу pivet.html то работает , и как мне сделать так чтоб когда я вводил /index.php?op=coments то выводил pivet.html ????
У меня та же проблема — когда ввожу pivet.html то работает , и как мне сделать так чтоб когда я вводил /index.php?op=coments то выводил pivet.html ????
но ответа нет... и это сайт «в помощь вебмастеру» ???
если еще актуально [L,QSA]
RewriteEngine on
RewriteRule ^privet.html$ index.php?op=coments [L,QSA]
даст то что требуется
Всех с НОВЫМ ГОДОМ!
Подскажите плиз как правильно сократить ссилки вида-www.xxx.com.ua/shop/catalog/index.php
наwww.xxx.com.ua/index.php
Тоесть убрать shop/catalog/
Спасибо за данную статью очень помогло.
Оставить комментарий: