Это директивы (инструкции) преобразования адресов для PHP Zend Framework модуля mod_rewrite. Использование директив модуля mod_rewrite увеличивает нагрузку на сервер!
# Описание инструкции (комментарий до конца строки)
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Включение изменения ссылок: RewriteEngine on
Базовый URL для преобразований в каталоге: RewriteBase /
RewriteCond
задает условие выполнения преобразований:
REQUEST_FILENAME – полный путь к файлу или скрипту из запроса
-s
файл с ненулевым размером:
RewriteCond %{REQUEST_FILENAME} -s [OR]
или -l
символическая ссылка:
RewriteCond %{REQUEST_FILENAME} -l [OR]
или -d
каталог:
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule задает правило преобразований:
^
- начало строки$
- конец строки.
- любой одиночный символ*
- ноль или N предшествующих символов (N > 0)nocase|NC
- не учитывать регистрlast|L
- последнее правилоRewriteRule шаблон_поиска строка_замены [флаги]
В шаблоне поиска записывается регулярное выражение для поиска в запрашиваемом URL.
.
- любой символ[ ]
- класс: [символы] любые символы класса, [^символы] любые символы кроме символов класса|
- или: text1|text2 текст1 или текст2^
- начало строки, $
конец строки?
- 0 или 1 вхождение предыдущего символа или группы*
- 0 или N вхождений (N > 0)+
- 1 или N вхождений (N > 1)$N
(N - порядковый номер группы), или группировка для альтернативы text1|text2.. [ ] ( )
.mod_rewrite
записываются в формате %{имя_переменной)
, где именем переменной может быть:server_name
– имя веб-сервера, например: www.сайт.ruserver_port
– номер порта веб-сервераdocument_root
– каталог документов верхнего уровня для веб-сайта, например, /usr/host/mysite/htmlhttp_forwarded
– переадресованная ссылкаhttp_host
– имя компьютера веб-сервераhttp_referer
– адрес страницы, с которой выполняется переход на текущую страницуhttp_user_agent
– веб-клиент, который запросил текущую страницуremote_addr
– IP-адрес посетителяremote_host
– имя компьютера посетителяrequest_method
– метод запроса при обращении к текущей страницеscript_filename
– физический путь к запрошенной странице, например: /usr/host/mysite/html/page.phpquery_string
– параметры запроса к странице, например, id=3&parent=4request_uri
– запрошенный URL. Содержит строку запроса после имени сервера, например, /company/test.php?id=3&parent=4request_filename
– то же самое, что и request_uri
time_year
– текущий год, time_mon
– месяц, time_day–
деньtime_hour
– час, time_min
– минута, time_sec
– секундаtime_wday
– день недели, time
– текущее времяRewriteCond контрольная_строка шаблон_поиска [флаги]
Если шаблон поиска найден в контрольной строке (условие выполнено), выполняются директивы, указанные сразу за директивой RewriteCond, или управление переходит к следующему блоку директив.
RewriteEngine on
RewriteBase /
RewriteRule ^oldpage.html$ newpage.html [R]
Запрос страницы oldpage.html преобразуется в запрос к странице newpage.html, причем если не указан флаг [R], это будет незаметно посетителю (в адресной строке останется oldpage.html)!
сайт.ru/~username/ -> сайт.ru/users/username/
RewriteRule /~([^/]+)?(/*)/ /users/$1/$2 [R]
Скобки ( ) в левой части обозначают группы по порядку, которые в правой части обозначены $1 и $2.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} Opera
RewriteCond %{REQUEST_FILENAME} server.ru/$|server.ru/index.php
RewriteRule ^(.*) index_opera.php?%{QUERY_STRING} [L]
RewriteCond %{HTTP_USER_AGENT} Netscape13
RewriteCond %{REQUEST_FILENAME} server.ru/$|server.ru/index.php
RewriteRule ^(.*) index_netscape.php?%{QUERY_STRING} [L]
Если выполнено первое условие RewriteCond - наличие в заголовке HTTP_USER_AGENT подстроки Opera -, проверяется следующее условие - запрос файла index.php или к корню сайта server.ru без указания имени файла. Если и это условие выполняется, выдается файл для браузера Opera – index_opera.php. (Флаг [L] означает окончание выполнения директив.) Если же первое условие не выполнено, управление переходит на следующий блок, который начинается с условия RewriteCond %{HTTP_USER_AGENT} Netscape и все происходит аналогично для браузера семейства Netscape.
С 7:00 до 19:00 дневной файл page_day.php, а в остальное время ночной файл page_night.php:
RewriteEngine On
RewriteBase /
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^page.php$ page_day.php?%{QUERY_STRING} [L]
RewriteRule ^page.php$ page_night.php?%{QUERY_STRING} [L]
Директивы файла robots.txt – это только рекомендации для роботов. Гарантированный запрет обеспечивают директивы в файле .htaccess, например:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^robot
RewriteCond %{REMOTE_ADDR} ^196.56.78.18
RewriteRule ^(.*) for_bad_robots.php