Pisząc reguły RewriteRule (mod_rewrite), możemy napotkać sporo problemów, zwłaszcza kiedy jest ich wiele. Na szczęście serwer Apache udostępnia dwie opcje, które pomogą nam się zalogować i odszukać, jaki popełniliśmy błąd. Odpowiadają za to parametry RewriteLog oraz RewriteLogLevel. Dyrektywy te można dopisać w dwóch miejscach. Pierwszym z nich jest plik konfiguracyjny całego serwera, a drugim konfiguracja wirtualnego hosta.

Pierwsza (RewriteLog) dyrektywa ustawia plik, w jakim będą logowane dane pochodzące z modułu mod_rewrite. Jeżeli nazwy pliku nie zaczniemy od znaczka (’/’), wtedy plik zostanie zapisany relatywnie do katalogu, ustawionego w dyrektywie Server Root.

[bash]RewriteLog "/var/log/httpd/rewrite.log"[/bash]

Dyrektywa ta powinna pojawić się tylko raz w pliku konfiguracyjnym serwera. Jeżeli chcemy wyłączyć logowanie, najprościej jest skasować ten parametr lub ustawić RewriteLogLevel na wartość 0. Nie jest zalecane ustawianie pliku jako /dev/null. Mimo, że nie będą zapisywane żadne dane na dysk, to dane będę i tak generowane, co może znacząco zwolnić pracę serwera.

Parametr RewriteLogLevel odpowiada za poziom logowania danych do pliku, gdzie 0 oznacza wyłączone logowanie, a 9 loguje każdą czynność serwera. Ustawiając bardzo wysokie wartości, możemy znacząco obciążyć serwer, dlatego zalecane jest korzystanie z wartości 2 lub 3. Dane logowane na tym poziomie, są wystarczające do analizy.

[bash]RewriteLogLevel 3[/bash]

Przykładowe zastosowanie

W pliku .htaccess zapisaliśmy przykładową regułę:

[bash]RewriteCond %{HTTPS} ^on$
RewriteCond %{REQUEST_URI} ^html [NC]
RewriteRule ^(.*)$ http://www.domena.com/html/$1 [R=301,L][/bash]

Nie działa ona nam poprawnie i chcemy przeanalizować, co się dzieje. W konfiguracji hosta wirtualnego dla tej aplikacji dopisujemy znane już nam dyrektywy:

[bash]<VirtualHost 100.100.100.100:443>
ServerName domena.com
DocumentRoot /home/domena.com/htdocs
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 5
[…]
</VirtualHost>[/bash]

Po restarcie serwera w pliku, zobaczymy przykładowy log:

[bash]193.238.93.130 – – [30/Dec/2011:09:28:00 +0000] [domena.com/sid#2b331f133bb0][rid#2b332e1ea980/initial] (4) [perdir /home/domena.com/htdocs/html/] RewriteCond: input=’on’ pattern=’^on$’ => matched
193.238.93.130 – – [30/Dec/2011:09:28:00 +0000] [domena.com/sid#2b331f133bb0][rid#2b332e1ea980/initial] (4) [perdir /home/domena.com/htdocs/html/] RewriteCond: input=’/html/pricing.html’ pattern=’^html’ [NC] => not-matched[/bash]

Z powyższego logu możemy wyczytać następujące informacje:

Opis Przykład
Adres hosta jaki wywołał URL 193.238.93.130
Zdalny login Zazwyczaj będzie to „-„
Autoryzacja HTTP Nazwa użytkownika lub „-” w przypadku braku logowania
Data i czas żądania (request) [30/Dec/2011:09:28:00 +0000]
Wirtualny host oraz jego ID [domena.com/sid#2b331f133bb0]
ID żądania (request) [rid#2b332e1ea980/initial]
Poziom logowania (4)
Treść błędu [perdir /home/domena.com/htdocs/html/] RewriteCond: input=’/html/pricing.html’ pattern=’^html’ [NC] => not-matched

Dzięki temu wiemy, jaki błąd popełniliśmy, (input='/html/pricing.html' pattern='^html' [NC] => not-matched) tworząc regułę (RewriteCond %{REQUEST_URI} ^html [NC]).

Jeżeli w logach Apacha widzimy błąd, RewriteLog not allowed here oznacza to, że dodaliśmy dyrektywy w złym miejscy. Najprawdopodobniej w pliku .htaccess.

Poprzedni artykułNetrunner 4.0
Następny artykuł0 A.D. Alpha 8 Haxāmaniš

3 KOMENTARZE

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj