Вводная по mod_rewrite
Синтаксис регулярных выражений | ^ | начало строки |
$ | конец строки | . (точка) | любой символ |
(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/page.htm на domain.com/new_page.htm RewriteRule ^page.htm$ new_page.htm [R,NC,L] |
|
# Человекопонятный URL (ЧПУ) |
|
# Человекопонятный 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