Apache’s mod_rewrite a mod_alias môžu byť veľmi užitočné, ale môžu byť tiež veľmi náročné na ladenie, keď nastane problém. Našťastie existuje niekoľko vecí, ktoré vám môžu pomôcť, a keďže pravdepodobne nie ste prvou osobou, ktorá sa pokúša niečo prepísať alebo presmerovať špecifickým spôsobom, pravdepodobne budete môcť nájsť odpoveď jednoduchým inteligentným hľadaním, keď pochopíte základy.
Prvým zdrojom, ktorý používam, by bol Apache mod_rewrite a mod_alias dokumentáciu. Môže sa to zdať únavné, ale Apache HTTP Server má v skutočnosti jednu z najlepších dokumentácií v tomto odvetví. Ak strávite 10 minút čítaním skutočnej dokumentácie a vyskúšate jej pochopenie, pravdepodobne nájdete odpoveď na väčšinu svojich otázok. Uistite sa, že ste sa odhlásili časť dokumentu mod_rewrite, ktorá pokrýva direktívu RewriteLogkeďže mať denník mení dohady na niečo laditeľné.
Ďalším nástrojom, ktorý rád používam, je curl, pretože vám zobrazuje hlavičky http a umožňuje vám presne vidieť, čo si klient a server hovoria. `curl` je celkom štandardný nástroj, ktorý je nainštalovaný na mnohých verziách *nix a je to k dispozícii na stiahnutie pre mnohé platformyvrátane Windows, cygwin a Mac OSX. Pozrime sa na príklad jednoduchého presmerovania 302 „Nájdené“:
[code]
$ curl –verbose –head –location example.com
* O pripojení () k portu example.com 80 (#0)
* Pokus o pripojenie 192.0.43.10…
* Pripojené k portu 80 (#0) example.com (192.0.43.10)
> HEAD / HTTP/1.1
> User-Agent: curl/7.21.7 (i386-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
> Hostiteľ: example.com
> Prijať: */*
>
* HTTP 1.0, predpokladať koniec za telom
< HTTP/1.0 302 Nájdených
HTTP/1.0 302 Nájdených
< Umiestnenie: http://www.iana.org/domains/example/
Miesto: http://www.iana.org/domains/example/
< Server: BigIP
Server: BigIP
* HTTP/1.0 pripojenie nastavené na udržanie života!
< Pripojenie: Keep-Alive
Spojenie: Keep-Alive
< Obsah-Dĺžka: 0
Obsah – dĺžka: 0
<
* Pripojenie č. 0 k hostiteľovi example.com zostalo nedotknuté
* Zadajte ďalšiu žiadosť na túto adresu URL: „http://www.iana.org/domains/example/“
* O pripojení () k portu 80 (#1) www.iana.org
* Pokus o pripojenie 192.0.32.8…
* Pripojené k portu 80 (č. 1) www.iana.org (192.0.32.8)
> HEAD /domény/príklad/ HTTP/1.0
> User-Agent: curl/7.21.7 (i386-redhat-linux-gnu) libcurl/7.21.7 NSS/3.12.10.0 zlib/1.2.5 libidn/1.22 libssh2/1.2.7
> Hostiteľ: www.iana.org
> Prijať: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Dátum: Pia, 16. decembra 2011 21:22:21 GMT
Dátum: Pia, 16. decembra 2011 21:22:21 GMT
< Server: Apache/2.2.3 (CentOS)
Server: Apache/2.2.3 (CentOS)
< Posledná úprava: St, 09 Feb 2011 17:13:15 GMT
Posledná úprava: Streda, 9. február 2011 17:13:15 GMT
< Vary: Accept-Encoding
Vary: Accept-Encoding
< Pripojenie: zatvorte
Pripojenie: zatvorte
< Typ obsahu: text/html; znaková sada=UTF-8
Content-Typ: text/html; znaková sada=UTF-8
<
* Uzatváracie spojenie #1
* Uzavretie spojenia #0
[/code]
Ak sa pozrieme dostatočne pozorne, môžeme z toho získať veľa informácií o žiadosti. Skutočný kód HTTP presmerovania 302 môžete vidieť v riadku „< HTTP/1.0 302 Found“, pričom ľavá hranatá zátvorka označuje, že ide o odpoveď zo servera (pravé hranaté zátvorky sú príkazy odoslané klientom -- curl , v tomto prípade). Vyššie uvedený príkaz curl, `curl --verbose --head --location example.com` nám hovorí, že curl by mal byť podrobný, len by mal poslať požiadavku HTTP "HEAD" namiesto GET a to malo by nasledovať akékoľvek "Umiestnenie: [...]" odpovede, ktoré dostane od servera (hovorí mu, aby prešiel na nové miesto). V tomto prípade, ako sme videli vyššie, curl znova spustí požiadavku s aktualizovaným umiestnením ako vstupnou adresou URL. Toto správanie napodobňuje prehliadačov, ale nejde o predvolené správanie zvlnenia. V niektorých prípadoch možno budeme musieť presnejšie simulovať prehliadač. Ak vaša aplikácia spracováva požiadavky GET a ignoruje HEAD, možno budete musieť vynechať „--head“ a namiesto toho stačí použiť '-o /dev/null' na zapísanie stiahnutého súboru nikam. Môžete to tiež jednoducho vynechať, čím sa vypíše zdroj stránky do vášho STDOUT (v podstate to isté ako '-o -'). je tiež potrebné zadať reťazec používateľského agenta na spustenie špecifického správania na lokalite, ako je napríklad mobilná lokalita. Skúsme to znova s example.com. Budeme simulovať požiadavku z iPhonu so systémom iOS 5.0 pomocou Safari, s '--trace -ascii pre úplný geek režim, ktorý nám ukáže ešte viac podrobností, ktoré by mohli byť užitočné pre optimalizovaný mobilný obsah. Použijeme tiež možnosť „--limit-rate“ pre curl na spomalenie prenosu na prehľadávanie (2G mobilné Rýchlosti GPRS, ktoré môže priemerné pripojenie dosiahnuť – 25 kbit/s): [code] $ curl --trace-ascii - --location -o /dev/null --user-agent 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 ako Mac OS X) AppleWebKit/534.46 (KHTML, ako Gecko) Verzia/5.1 Mobile/9A334 Safari/7534.48.3' --limit-rate 25k example.com == Info: O pripojení() k portu example.com 80 (#0) % Celkom % prijatých % Xferd Priemerná rýchlosť Čas Čas Čas Aktuálne zaťaženie Odovzdať Celková minulá rýchlosť 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0== Info: Pokus 192.0.43.10... = = Informácie: pripojené == Informácie: Pripojené k portu example.com (192.0.43.10) 80 (#0) => Odoslať hlavičku, 198 bajtov (0xc6) 0000: GET / HTTP/1.1 0010: User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 ako Mac OS X 0050: ) AppleWebKit/534.46 (KHTML, ako Gecko) Verzia/5.1 Mobile/9A33 0090: 4 Safari/7534.48.3 00a4: Hostiteľ: example.com 00b7: Prijať: */ * 00c4: == Informácie: HTTP 1.0, predpokladať zavrieť za telom <= hlavička príjmu, 20 bajtov (0x14) 0000: HTTP/1.0 302 nájdených <= hlavička príjmu, 48 bajtov (0x30) 0000: umiestnenie: http://www .iana.org/domains/example/ <= hlavička príjmu, 15 bajtov (0xf) 0000: Server: BigIP == Informácie: HTTP/1.0 pripojenie nastavené tak, aby zostalo pri živote! <= Hlavička príjmu, 24 bajtov (0x18) 0000: Pripojenie: Keep-Alive <= Hlavička príjmu, 19 bajtov (0x13) 0000: Content-Length: 0 <= Hlavička príjmu, 2 bajty (0x2) 0000: 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 == Info: Pripojenie č. 0 k hostiteľovi example.com zostalo nedotknuté == Info: Vydať ďalšiu požiadavku na túto adresu URL: 'http://www.iana.org/domains/example/' == Info: O pripojení () k portu 80 (#1) www.iana.org == Info: Skúšam 192.0.32.8. .. == Info: pripojené == Info: Pripojené k www.iana.org (192.0.32.8) port 80 (#1) => Odoslať hlavičku, 215 bajtov (0xd7) 0000: GET /domains/example/ HTTP/1.0 0020: User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 ako Mac OS X 0060: ) AppleWebKit/534.46 (KHTML, ako Gecko) Verzia/5.1 Mobile/9A33 00a0: 4 Safari/7534.48.3 00b4: Hostiteľ: www.iana.org 00c8: Prijať: */* 00d5: <= hlavička príjmu, 17 bajtov (0x11) 0000: HTTP/1.1 200 OK <= hlavička príjmu, 31 bajtov (0x1f) 0000: Server: Apache/2.2.3 (CentOS) <= Hlavička príjmu, 46 bajtov (0x2e) 0000: Posledná úprava: Streda, 9. február 2011 17:13:15 GMT <= Hlavička príjmu, 23 bajtov (0x17) 0000: Vary: Accept-Encoding <= Recv hlavička, 40 bajtov (0x28) 0000: Content-Type: text/html; charset=UTF-8 <= hlavička príjmu, 22 bajtov (0x16) 0000: Accept-Ranges: bytes <= hlavička príjmu, 24 bajtov (0x18) 0000: pripojenie: zavrieť <= hlavička príjmu, 37 bajtov (0x25) 0000: dátum : Pia, 16. december 2011 21:47:36 GMT <= Hlavička príjmu, 14 bajtov (0xe) 0000: Vek: 101 <= Hlavička príjmu, 22 bajtov (0x16) 0000: Content-Length: 2966 <= Hlavička príjmu, bajtov (0x2) 0000: <= Prijaté údaje, 1170 bajtov (0x492) 0000: ..................