HTACCESS - konfigurace pravidla
Dobrý den,
mám základní root serveru:
A pak mám podadresář třeba rezervace:
http://127.0.0.1:8080/rezervace
mám napsáno následující pravidlo v .htaccess (v adresáři rezervace)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/system.*
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ {HTTP_HOST}/rezervace/$1 [R=301,L]
A výsledkem je to, že když zadám do prohlížeče:
http://127.0.0.1:8080/rezervace/index.php
Tak mě vykopne o úroveň zpět na:
http://127.0.0.1:8080/index.php
Mám tam něco špatně ?
dík
A můžeš říct, co ty tvé rewrite rules mají podle tebe dělat? Podle mých relativně chabých znalostí apáče:
první pár řeší přesměrování pro URI začínající "/system.*" a v případě aktivace ukončí hledání stringů k přepisu. Divné, ale IMHO nic nehrotící.
druhá trojička řeší neexistující fyzické soubory a složky s redirekcí na index.php a v případě aktivace ukončí hledání stringů k přepisu (zde to IMHO máš špatně, protože request_filename kontroluje soubory na lokálním disku, v lokálním FS, s lokálními cestami - zkoušel sis, co ti z té proměnné leze?)
ten poslední pár řeší redirekt pro všechny hostitele co nezačínají "www" na URN, který se skládá z "/rezervace/"+původní URN. Tady by se měla dít většina přepisů, ale řekl bych, že k tomu nikdy nedojde, kvůli druhému setu podmínek a přepisu.
Podle mě ti to začne fungovat, když zakomentuješ tu prostřední trojičku.
edit: tady máš k tomu počtení: https://serverfault.com/questions/1024920/whats-the-difference-between-request-filename-and-request-uri-in-apache-configu
edit2: a ten poslední máš také špatně. Přidává "/rezervace/" zcela bezpodmínečně, takže na již existující /rezerveace/index.php nalepí ještě jednou "/rezervace", takže z toho vypadne: /rezervace/rezervace/index.php
BTW, vždycky bys měl začít logem. error.log a access.log ti řeknou nejvíc.
Ok. Díky za odpověď.
Moje znalosti rewrite rules nejsou o nic asi větší než ty tvoje.
Tímto se zabývám taky jen když musím.
Teď jsem to nějak pořešil už.
Hlavní, co k tomu mohu dodat:
Strašně blbě se to ladí.
Po nějaké době jsem zjistil, že mé veškeré snahy jdou vniveč.
Protože všechny moderní prohlížeče cachují pravidla !!!
Takže jakmile poprve toto pravidlo se aplikuje, tak na další změny prohlížeč nereaguje !!!
Vyřešil jsem to tak, že jsem soubor vždycky přesunul a spustil to bez něho.
Nasledně jsem provedl změny a zase ho tam dosadil.
Až tento způsob mi umožnil odladit tato pravidla.
Jak píšu, opravdu blbě se to ladí, protože restart prohlížeče či Apache na to nemá vliv.
Hlavně ale že to jede už.
IMHO prohlížeč .httaccess nedostane, je to věc jen indiána.
Pokud vrátí HTTP kód 301, tak to prohlížeč opravdu cachuje. Ten kód totiž znamená Moved Permanently, takže to prohlížeči říká, aby to příště vůbec nezkoušel a rovnou šel na adresu, kam je to přesměrované.
Na rozdíl od kódů 303 nebo 307.