Что означают строчки с RewriteCond и RewriteRule в файле .htaccess?
Это директивы (инструкции) преобразования адресов для PHP Zend Framework модуля mod_rewrite. Использование директив модуля mod_rewrite увеличивает нагрузку на сервер!
Базовый URL для преобразований в каталоге: RewriteBase /
RewriteCond задает условие выполнения преобразований:
REQUEST_FILENAME – Полный путь к файлу или скрипту из запроса
’-s’ файл с ненулевым размером:
^ начало строки
$ конец строки
. любой одиночный символ
* ноль или N предшествующих символов (N > 0)
‘nocase|NC’ не учитывать регистр
‘last|L’ последнее правило
[spoiler title="Некоторые правила PERL-совместимых регулярных выражений"]
Текст:
. любой символ
[ ] класс: [символы] любые символы класса, [^символы] любые символы кроме символов класса
| или: text1|text2 текст1 или текст2
^ начало строки, $ конец строки
Квалификаторы:
? 0 или 1 вхождение предыдущего символа или группы
* 0 или N вхождений (N > 0)
+ 1 или N вхождений (N > 1)
Группировка:
(текст) группа в левой части, которая в левой части обозначается $N (N - порядковый номер группы) (см. ниже пример 2), или группировка для альтернативы text1|text2
Экранирование спецсимволов:
символ если нужно использовать символы, которые имеют специальное значение, такие как . [ ] ( ) [/spoiler]
В строке замены могут использоваться текст, ссылки на подстроки из шаблона поиска и значения серверных переменных.
Серверные переменные в директивах модуля mod_rewrite записываются в формате
%{имя_переменной), где именем переменной может быть:
server_name – имя веб-сервера, например: www.сайт.ru
server_port – номер порта веб-сервера
document_root – каталог документов верхнего уровня для веб-сайта, например, /usr/host/mysite/html
[spoiler title="Некоторые другие серверные переменные"]
http_forwarded – переадресованная ссылка
http_host – имя компьютера веб-сервера
http_referer – адрес страницы, с которой выполняется переход на текущую страницу
http_user_agent – веб-клиент, который запросил текущую страницу
remote_addr – IP-адрес посетителя
remote_host – имя компьютера посетителя
request_method – метод запроса при обращении к текущей странице
script_filename – физический путь к запрошенной странице, например: /usr/host/mysite/html/page.php
query_string – параметры запроса к странице, например, id=3&parent=4
request_uri – запрошенный URL. Содержит строку запроса после имени сервера, например, /company/test.php?id=3&parent=4
request_filename – то же самое, что и request_uri
time_year – текущий год, time_mon – месяц, time_day– день
time_hour – час, time_min – минута, time_sec – секунда
time_wday – день недели, time – текущее время
[/spoiler]
Если шаблон поиска найден в контрольной строке (условие выполнено), выполняются директивы, указанные сразу за директивой RewriteCond, или управление переходит к следующему блоку директив.
(Флаг [L] означает окончание выполнения директив.)
Если же первое условие не выполнено, управление переходит на следующий блок, который начинается с условия
Источники:
http://itif.ru/htaccess-dly-zend-framework/
http://web.ixit.ru/pdf/apache/apache_config.pdf
Подробнее: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteoptions
Всего просмотров 2,593, сегодня 53
Это директивы (инструкции) преобразования адресов для 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} -dRewriteRule задает правило преобразований
^ начало строки
$ конец строки
. любой одиночный символ
* ноль или N предшествующих символов (N > 0)
‘nocase|NC’ не учитывать регистр
‘last|L’ последнее правило
Содержание [hide]
В общем виде, в теории:
Правила
RewriteRule шаблон_поиска строка_замены [флаги]
В шаблоне поиска записывается регулярное выражение для поиска в запрашиваемом URL.[spoiler title="Некоторые правила PERL-совместимых регулярных выражений"]
Текст:
. любой символ
[ ] класс: [символы] любые символы класса, [^символы] любые символы кроме символов класса
| или: text1|text2 текст1 или текст2
^ начало строки, $ конец строки
Квалификаторы:
? 0 или 1 вхождение предыдущего символа или группы
* 0 или N вхождений (N > 0)
+ 1 или N вхождений (N > 1)
Группировка:
(текст) группа в левой части, которая в левой части обозначается $N (N - порядковый номер группы) (см. ниже пример 2), или группировка для альтернативы text1|text2
Экранирование спецсимволов:
символ если нужно использовать символы, которые имеют специальное значение, такие как . [ ] ( ) [/spoiler]
В строке замены могут использоваться текст, ссылки на подстроки из шаблона поиска и значения серверных переменных.
Серверные переменные в директивах модуля mod_rewrite записываются в формате
%{имя_переменной), где именем переменной может быть:
server_name – имя веб-сервера, например: www.сайт.ru
server_port – номер порта веб-сервера
document_root – каталог документов верхнего уровня для веб-сайта, например, /usr/host/mysite/html
[spoiler title="Некоторые другие серверные переменные"]
http_forwarded – переадресованная ссылка
http_host – имя компьютера веб-сервера
http_referer – адрес страницы, с которой выполняется переход на текущую страницу
http_user_agent – веб-клиент, который запросил текущую страницу
remote_addr – IP-адрес посетителя
remote_host – имя компьютера посетителя
request_method – метод запроса при обращении к текущей странице
script_filename – физический путь к запрошенной странице, например: /usr/host/mysite/html/page.php
query_string – параметры запроса к странице, например, id=3&parent=4
request_uri – запрошенный URL. Содержит строку запроса после имени сервера, например, /company/test.php?id=3&parent=4
request_filename – то же самое, что и request_uri
time_year – текущий год, time_mon – месяц, time_day– день
time_hour – час, time_min – минута, time_sec – секунда
time_wday – день недели, time – текущее время
[/spoiler]
Условия
RewriteCond контрольная_строка шаблон_поиска [флаги]Если шаблон поиска найден в контрольной строке (условие выполнено), выполняются директивы, указанные сразу за директивой RewriteCond, или управление переходит к следующему блоку директив.
Примеры:
1. Скрытое и видимое преобразование
RewriteEngine on RewriteBase / RewriteRule ^oldpage.html$ newpage.html [R]- запрос страницы oldpage.html преобразуется в запрос к странице newpage.html, причем если не указан флаг [R], это будет незаметно посетителю (в адресной строке останется oldpage.html)!
2. Преобразование сайт.ru/~username/ -> сайт.ru/users/username/
... RewriteRule /~([^/]+)?(/*)/ /users/$1/$2 [R]Скобки ( ) в левой части обозначают группы по порядку, которые в правой части обозначены $1 и $2.
3. Преобразование в зависимости от типа браузера
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
4. Преобразование в зависимости от времени суток
С 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]
5. Запрет для конкретного робота
Директивы файла robots.txt – это только рекомендации для роботов. Гарантированный запрет обеспечивают директивы в файле .htaccess, например:RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^robot RewriteCond %{REMOTE_ADDR} ^196.56.78.18 RewriteRule ^(.*) for_bad_robots.phpЗдесь проверяется имя robot, переданное в заголовке user-Agent, а затем IP-адрес, с которого робот пришел на сайт. Если оба условия выполняются, происходит запрос к странице for_bad_robots.php.
Источники:
http://itif.ru/htaccess-dly-zend-framework/
http://web.ixit.ru/pdf/apache/apache_config.pdf
Подробнее: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriteoptions
Всего просмотров 2,593, сегодня 53
Запись опубликована в рубрике htaccess с метками .htaccess, mod_rewrite, RewriteCond, RewriteRule, Zend. Добавьте в закладки постоянную ссылку.
Гость говорит:
Гость говорит:
Все хорошо в теории, а на практике зависит от настроек сервера...
Вопрос по файлу .htaccess:
Имеется сайт http://www.сайт.ru
в директории http://www.сайт.ru/dir - еще один сайт.
в директории http://www.сайт.ru/dir/forum - еще один сайт (форум).
Возможно ли используя файл или файлы .htaccess (имеющихся сайтов), сделать чтобы форум http://www.сайт.ru/dir/forum работал по адресу несуществующей директории http://www.сайт.ru/forum
Имеется сайт http://www.сайт.ru
в директории http://www.сайт.ru/dir - еще один сайт.
в директории http://www.сайт.ru/dir/forum - еще один сайт (форум).
Возможно ли используя файл или файлы .htaccess (имеющихся сайтов), сделать чтобы форум http://www.сайт.ru/dir/forum работал по адресу несуществующей директории http://www.сайт.ru/forum
да!
Печи для финской сауны.
ОтветитьУдалитьhttps://cyky.ru/pechi/pechi-dlya-finskoi-sauni/
Помогите разобраться. Эта запись появилась в файле htaccess Сам файл в корне сайта
ОтветитьУдалитьphp_flag register_globals On
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /core.php [L]