Вводная по mod_rewrite

24.09.2011 15:36:38
Синтаксис регулярных выражений
^ начало строки
$ конец строки
. (точка) любой символ
(a|b) a или b
(...) выбор группы
[abc] любой символ из диапазона (a или b или c)
[^abc] ни один символ из диапазона (ни a или b или c)
a? символ a 1 или 0 раз
a* символ a 0 или более раз
a+ символ a 1 или более раз
a{3} символ a точно 3 раза
a{3,} символ a более 3 раз
a{3,6} символ a от 3 до 6 раз
!(pattern) ! - отрицание

 

Коды ответа сервера
301 Moved permanently (Перемещен постоянно)
302 Moved temporarily (Перемещен временно)
403 Forbidden (Запрещено)
404 Not found (Файл не файден)
410 Gone (Больше не существует)
Флаги RewriteRule
R[=code] Перенаправление на новый URL по заданному коду
F Forbidden (отправляет заголовок 403)
G Больше не существует (Gone)
P Прокси (Proxy)
L Последнее правило
N Следующий
C Chain
T=mime-type Установка mime-type
NS Skip if internal sub-request
NC Не зависимый от регистра символов
QSA Append query string (Прибавляет строку запроса)
NE Не отменяет результат
PT Через
S=x Пропустить следующие x правил
E=var:value Устанавливает переменную окружения "var" в "value".

 

RewriteCond FLAGS
NC Не зависимый от регистра символов
OR Allows a rule to apply if one of a series of conditions are true

Переменные сервера

Формат
%{NAME_OF_VAR}

HTTP Headers (заголовки)
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT

Request (переменные запроса)
REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE

Server (переменные сервера)
DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

Время
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

Специальные
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Директивы
RewriteEngine
RewriteOptions
RewriteLog
RewriteLogLevel
RewriteLock
RewriteMap
RewriteBase
RewriteCond
RewriteRule

Примеры mod_rewrite

# Сайт перенесен с одного домена на другой
# с domain.com на domain2.com
RewriteCond %{HTTP_HOST} ^www.domain.com$ [R=301,1]
RewriteRule ^(.*)$ http://www.domain2.com/$1

# Страница временно перемещена
# domain.com/page.htm на domain.com/new_page.htm
RewriteRule ^page.htm$ new_page.htm [R,NC,L]

# Человекопонятный URL (ЧПУ)
# domain.com/category-name-1/ из domain.com/categories.php?name=category-name-1
RewriteRule ^([A-Za-z0-9-]+)/?$ categories/php?name=$1 [L]

# Человекопонятный URL (ЧПУ)
# domain.com/articles/title/5/ из domaim.com/articles.php?name=title$page=5
RewriteRule ^articles([A-Za-z0-9-]+) /([0-9]+)/?$ article.php?name=$1&page=$2 [L]
# Блокирование спама по HTTP_REFERER
RewriteCond %{HTTP_REFERER} (weight) [NC,OR]
RewriteCond %{HTTP_REFERER} (drugs) [NC]
RewriteRule .* - [F]

Если есть желание не допускать кого-либо на сайт по IP, то можно ограничить его доступ
Deny from 95.73.30.80

Или переадресовать на другой сайт
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^95.73.30.80
RewriteRule ^(.*)$ http://ya.ru/$1

Если IP не равен:
RewriteCond %{REMOTE_ADDR} !(^95.73.30.80$)
RewriteRule ^(.*)$ http://ya.ru/$1

Если запросили не gif или jpg, то перекидывать на index.php:
RewriteRule !.(gif|jpg)$ index.php


Категории: Apache
Яндекс.Метрика