Примеры mod rewrite

obnovaMod Rewrite — это такой механизм, по умолчанию включенный в Аpache, который дает возможность динамически менять URL страницы. Он как правило используется для редиректа и ЧПУ (чистые ссылки типа /contacts), но из него можно выжать гораздо больше. Об этом и пойдет речь в этой статье.

Для начала включим его
Чтобы включить Mod_Rewrite нужно открыть файл в корне сайта и вставить следующий код в начало этого файла.

RewriteEngine on
Простая команда замены URL’а
Синтаксис:

RewriteRule Pattern Substitution [Flag(s)] Пример:

RewriteRule ^/$ index.php
RewriteRule ^about$ about.php
RewriteRule ^contacts$ contacts.php
RewriteRule ^develop$ develop.php
RewriteRule ^powerup$ powerup.php
RewriteRule ^services$ services.php
RewriteRule ^support$ support.php
Т.е с URL’ла http://domain.ru/ будет открываться страница
http://domain.ru/index.php, c http://domain.ru/about – http://domain.ru/about.php и т.д.

URL’лы всегда относительны
Помните что URL для перенаправления в файле .htaccess всегда указывается относительно каталога, в котором находится этот файл. В предыдущем примере файл .htaccess находился в корневом каталоге.

Простой редирект
Если вы хотите чтобы со страницы 1. пользователь попадал на страницу 2. c помощью простого 301 Redirect, то вставте в файл .htacces следующий код:

RewriteRule ^1.html$ 2.html не работает без WWW
Если ваш сайт не открывается, если вводить его URL без www, то вставте в файл .htaccess в корне сайта следующий код:

RewriteCond %{HTTP_HOST} !^yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L]
Блокирование определённого IP-адреса
Если вы хотите заблокировать доступ к сайту с определённого IP-адреса, вы можете использовать следующий код:

RewriteCond %{REMOTE_ADDR} ^(A\.B\.C\.D)$
RewriteRule ^/* http://www.yourdomain.com/sorry.html [L]
Вместо A,B,C,D поставте соответствующие цифры нужного IP-адреса, не забывайте ставить слеш перед точкой.
Пользователя с этим IP перенаправит на страницу http://www.yourdomain.com/sorry.html.

Блокировка по UserAgent

Если вы хотите заблокировать пользователя, использующего определённый UserAgent, либо бота, что более вероятно 😉 то используйте следующий код

RewriteCond %{HTTP_USER_AGENT} UserAgent
RewriteRule .* — [F,L]
где слово UserAgent заменяется на UserAgent, пользователей или ботов, использующих который, вы не хотели бы видеть у себя на сайте.
Также можно блокировать несколько UserAgent’ов заменив первую строчку кода на что-то подобное:

RewriteCond %{HTTP_USER_AGENT} UserAgentA [OR]
RewriteCond %{HTTP_USER_AGENT} UserAgentB
Изображение по умолчанию
В случае ненахождения файла изображения на сайте, браузер оставляет его пустым, либо использует свою стандартную картинку. Чтобы при “битой ссылке” на изображение, отображалась ваша стандартная картинка, скажем /images/default.jpg. Вам поможет следующий код:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^images/.*\.jpg$ /images/default.jpg [L]
Редирект со всех страниц сайта на одну
При ведении работ по изменению содержания или функционала вашего сайта часто необходимо перенаправлять пользователей со всех страниц на одну (”на сайте ведутся работы”), например page.html. Для этого можно использовать следующий код:

RedirectMatch 302 ^/ /page.html
Файлы всегда имеют приоритет
Помните, что файлы на сервере всегда будут иметь приоритет над URL’ом. Тоесть есть у вас есть каталог about, вы не сможете перенаправить пользователя на http://yourdomain.com/about. Чтобы исправить это, просто переименуйте соответствующий каталог.
И ещё. Помните, что команды в файле .htaccess учитывают регистр символов.

  • Defiterka

    интересно было прочитать.

  • Гелла

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

  • Любитель

    Прикольно))

  • beammafemsRom

    Спасибо огромное

  • Майкл

    Как с вами можно связаться? По мылу или через аську реально?

  • Kekelv

    Актуальный блог, свежая инфа, почитываю

  • Спасибо, хорошая и нужная информация

  • Анатолий

    А как сделать вот такое условие:

    1. RewriteRule ^films index.php?act=3 [NC]

    2. RewriteRule ^films/([0-9-]+) index.php?act=3&film=$1 [NC,L]

    не работает данное условие...

    get['film'] все время пустой...

  • Валентин

    Насчет последнего пункта про приоритеты. Неужели никак нельзя обойти это?

Запись навигация

Top