mod_rewrite на примерах

Документация о программных продуктах, тематические статьи.
Правила форума
Убедительная просьба быть вежливыми и терпимыми.
Если вы нашли ошибку или какую-то неточность в статье, сообщите нам об этом любым удобным для вас способом.

mod_rewrite на примерах

Сообщение kaba » 05 окт 2009, 19:01

В этой статье мы рассмотрим как легко работать с mod_rewrite и приведем несколько примеров для разных ситуаций. Все правила добавляются в .htaccess файл в директории вашего сайта или сабдомена.

1. Преобразовываем динамическую ссылку в человеко читаемую.

Например вы используете какое-то программный веб скрипт для вашего сайта. Но как вы уже заметили ссылки вашего сайта тяжело запомнить, например они выглядят так:
Код: Выделить всё
http://goodnet.com.ua/index.php?show=1&year=2009&month=09&day=01

Если бы ссылки выглядели по другому, например так:
Код: Выделить всё
http://goodnet.com.ua/news/2009/09/01

то наверное вам бы было более наглядно искать эту ссылку, да и поисковые роботы с ними работали лучше.
Как это исправить? Очень просто, пример правил для mod_rewrite:
Код: Выделить всё
RewriteEngine On
RewriteRule ^([a-z]+)/([0-9]*)/([0-9]*)/([0-9]*)/$ /index.php?show=$1&year=$2&month=$3&day=$4


2. Автоматическое перенаправление адреса.
У вас есть сайт и вы не хотите путаться набирать перед именем сайта www или нет, или вы хотите перенаправить любые запросы на ваш сайт на другой сайт. Нет проблем, делается это так:
Код: Выделить всё
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.goodnet.com.ua$
RewriteRule ^(.*)$ http://goodnet.com.ua/$1 [NC,R=301,L]


3. Перенаправление с сайт в другую папку.
Вы хотите чтобы при открытии сайта открывались данные с другой папки или у вас установлен форум в директорию сайта, а обращение к форуму вы хотите сделать как forum.goodnet.com.ua. Делается это просто:
Код: Выделить всё
RewriteEngine on
RewriteCond %{HTTP_HOST} ^forum\.goodnet\.com\.ua$ [NC]
RewriteCond %{REQUEST_URI} !^/forum/$ [NC]
RewriteRule (.*) /forum/$1 [L]


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

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

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

Код: Выделить всё
RewriteEngine on
RewriteBase /images/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .* - [ F ]


В этом примере стоит запрет на все файлы, но можно сделать выборочный запрет. Для примера запретим доступ с другого сайта на директорию img и файлы с расширением gif,jpeg,png, делается это так:
Код: Выделить всё
RewriteEngine on
RewriteBase /img/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpeg|gif|png)$ - [ F ]


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

Код: Выделить всё
RewriteEngine on
RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900
RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800
RewriteRule .* - [ F ]


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

Бывают случаи, что нужно закрыть доступ к сайтам поисковым роботам, приведем пример блокировки для Google:
Код: Выделить всё
RewriteEngine on
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [R=404]


Роботу google будет выдаваться ошибка 404 при обращению к сайту, номер ошибки можете изменить под свои потребности.

7. Запрет к сайту пользователям, поисковикам зеленый свет

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

Код: Выделить всё
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]


Внимательно с этим правилом и не используйте его на длительный срок иначе можете получить бан от поисковиков.
---
Best regards
Ihor R.
GoodNet Ukraine Support Team
goodnet.com.ua
Аватара пользователя
kaba
Site Admin
 
Сообщения: 121
Зарегистрирован: 08 июл 2009, 07:27
Откуда: GoodNet Ukraine

mod_rewrite на примерах

Сообщение kaba » 24 май 2010, 12:05

8. Открывание картинок gif без расширения

Некоторые люди хотят чтобы весь сайт был в ЧПУ, в том числе чтобы и картинки открывались без расширения. Вот пример обработки картинок без расширения, картинки в формате GIF.

Код: Выделить всё
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.gif
---
Best regards
Ihor R.
GoodNet Ukraine Support Team
goodnet.com.ua
Аватара пользователя
kaba
Site Admin
 
Сообщения: 121
Зарегистрирован: 08 июл 2009, 07:27
Откуда: GoodNet Ukraine

mod_rewrite на примерах

Сообщение kaba » 27 май 2010, 00:27

9. Запрет доступа для определённого IP-адреса

Иногда бывает полезным не только заблокировать доступ к сайту через firewall или правила Allow, Deny , а именно сделать запрет и при этом сообщить причину. Делается это так:

Код: Выделить всё
RewriteCond %{REMOTE_ADDR} ^(A\.B\.C\.D)$
RewriteRule ^/* http://goodnet.com.ua/sorry.html [L]


где A,B,C,D - это числа IP адреса, например для адреса 192.168.0.1 правило будет выглядеть так:

Код: Выделить всё
RewriteCond %{REMOTE_ADDR} ^(192\.168\.0\.1)$
RewriteRule ^/* http://goodnet.com.ua/sorry.html [L]


ну и не забыть создать файл sorry.html со своим содержимым.
---
Best regards
Ihor R.
GoodNet Ukraine Support Team
goodnet.com.ua
Аватара пользователя
kaba
Site Admin
 
Сообщения: 121
Зарегистрирован: 08 июл 2009, 07:27
Откуда: GoodNet Ukraine


Вернуться в Статьи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron