.htaccess, mod_rewrite без перенаправления

Jaxx: начал недавно учить веб-программирование, вот никак не могу понять разницу между редиректом и форвардом :(
Andronix: вот смотри, представь себе ты вышел к ларьку купить бутылку водки... при этом продавщица сказала тебе, что водка закончилась, и послала тебя в другой киоск - это типа редирект.
Jaxx: ну а форвард?
Andronix: а форвард, это когда продавщица сказала, что щас мол поищет, а сама незаметно вышла из ларька, сбегала через дорогу в соседний киоск, купила там водки, потом так же незаметно вернулась и перепродала тебе эту бутылку еще даже с наценкой :)

©http://bash.org.ru


Схожая ситуация складывается с правилами rewrite (редирект) и alias (форвард) для файлов httpd.conf и .htaccess в сервере apache. Эти модули и директивы очень полезны, например для формирования ЧПУ (человеко-понятный URL - /cat/for-everyone вместо ?q=cat/for-everyone), для перенаправления внутренних URL на другие сайты или внутри сайта, для маскирования реального адреса страницы и так далее.

Проблема многих начинающих программистов на PHP заключается в том, что на платном виртуальном хостинге они не имеют доступа к httpd.conf, соответственно, не могут прописывать правила модуля alias, а к rewrite имеется доступ с помощью файлов .htaccess, действие которых распространяется на папку/домен, а не на весь apache. Соответственно, ему приходится использовать rewrite, который в случае указания домена отдает браузеру ошибки 301 и 302 (постоянное и временное перенаправление), которые заставляют браузер перейти по новому адресу, который приходит в заголовках ошибки.

Решение: вместо RewriteRule ^(.*)$ http://liworks.ru/index.php?q=$1 [L,QSA] необходимо написать  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] (убрать доменное имя), в таком случае модуль перенаправления (rewrite) работает точно как модуль замены псевдонима (alias)! Вот такая особенность увеличивает производительность за счет уменьшения количества запросов к серверу (при перенаправлении два запроса вместо одного), а так же не осуществляется замена адресной строки в браузере. Фактически, rewrite работает как alias, что упрощает задачи построения сайтов, не требует изменения httpd.conf и перезагрузки сервера, а также единство сайта (скрипты и файлы .htaccess при переносе не требуют дополнительных настроек в httpd.conf).

Отправить комментарий

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

КАПЧА
Это проверка, являетесь ли вы злобным спам-роботом или человеком.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.