понедельник, 18 ноября 2013 г.

htaccess. URL rewrite. 301 redirect. Куча потраченного времени.

Прежде чем начать следует заметить, что браузер кэширует 301 редирект, после которого переход на новую страницу будет проходить без участия apache. Для этого можно установить дополнения к браузеру, которые чистят кэш (например close and forget). Также для тестирования понадобится - чтение HTTP заголовков, в которых будет четко написано: происходил ли редирект, откуда, куда (add-ons "Live HTTP Headers"). В случае неудачи, не забываем смотерть в логи апача.
Также перед началом работы следует убедиться, что mod_rewrite-enable. И принудительно включить его еще раз.
sudo a2enmod rewrite;
В локальный хост следует не забыть установить  AllowOverride All . И только потом:
sudo service apache2 restart
 Затем пару пробничков. В .htaccess файле:

RewriteEngine   on
RewriteRule     ^(.+)\.htm$  http://%{HTTP_HOST} [R=permanent]
 Этот пример, делает редирект на index.html, когда пользователь не дописал расширение html до конца (забыв про последнюю букву).
Константа %{HTTP_HOST} - возвращает главный адрес сайта. Перед ней желательно ставить http:// , а то будет происходить путаница и возвращаемый адрес, будет считаться путем к файлу.

Следует заметить, что в RewriteRule , стандартно обрабатываются только URI и символ начала строки "^", будет означать начало не всего адреса URL(www.google.com/map/haha), а только начало URI(/map/haha). Для полного обрабатывания, следует явно указывать http, www.
 Следующий пример, будет прит недописанных htm, будет дописывать букву "l":
     RewriteEngine   on
     RewriteRule     ^(.+)\.htm$  $1.html [R=permanent]
где $1 - переменная содержащая результат с первой группы(первых скобочек в первом параметре  RewriteRule .
Также встречаются %1 переменные ,которые указыват первую группу в RewriteCond. (Но это нужно более точно уточнить)

Комментариев нет:

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