Autor | Zpráva | ||
---|---|---|---|
Lorin Profil * |
#1 · Zasláno: 5. 2. 2013, 17:26:16
Vím, že to tu již bylo několikrát, hledal jsem jak tady, tak na googlu. Zatím jsem nic relevantního nenašel. (Nejspíš se blbě ptám :)) Můj htaccess vypadá následovně:
RewriteEngine On RewriteBase /slozka RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&id=$3 [NC,L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&type=$3&id=$4 [NC,L] V rámci možností to funguje. Po zadání adresy ve tvaru www.mujweb.cz/slozka/stránka/sekce/ID se stránka načte. Mám ale dva problémy. 1) Odkazy, které mám ve stránce (přímo napsané v PHP souboru) jsou v tom "nehezkém" tvaru: www.mujweb.cz/slozka/index.php?p=stránka&s=sekce&i=id. Když si načtu stránku pomocí "hezké" adresy a pak kliknu na nějaký odkaz, adresa se přepíše tak, že můj odkaz se dosadí místo ID. Příklad: www.mujweb.cz/slozka/user/profile/1 => www.mujweb.cz/slozka/user/profile/index.php?p=user§ion=profile&id=1 Musím přepsat všechny odkazy v souborech, nebo stačí přidat nějaké další pravidlo a přepis? 2) S ohledem na to, že mám CSS vložené pomocí relativní cesty (relativní k souboru index.php), po zadání "hezké" adresy se kaskádové styly nenačtou. Jde nějak v .htaccess nastavit, aby se "hezká" adresa, kterou používám nepočítala jako adresář? Pokud nebudu počítat možnost, kdy místo "/" dosadím "_" nebo "-". |
||
Davex Profil |
#2 · Zasláno: 5. 2. 2013, 19:25:03
Lorin:
ad 1) Na stránku musíš vypsat odkazy v nové podobě. Žádné pravidlo v tomto nepomůže, protože v pravidlech mod_rewrite se zpracovávají jen adresy, které od serveru požaduje prohlížeč. ad 2) V odkazech na další soubory používej kořenové adresy. |
||
Lorin Profil * |
#3 · Zasláno: 5. 2. 2013, 20:46:20 · Upravil/a: Lorin
Díky za odpověď.
Davex: „ad 2) V odkazech na další soubory používej kořenové adresy.“ Co se kořenové adresy týče, myslí se tím od kořene určeného v RewriteBase nebo kořene webu jako takového? Tak jsem zkusil jen namátkou několik odkazů předělat. Zjistil jsem, že na stránce se vyskytují ještě další typy odkazů. a) www.mujweb.cz/slozka/stranka b) www.mujweb.cz/slozka/stranka/sekce c) www.mujweb.cz/slozka/stranka/sekce/id (Už implementováno) d) www.mujweb.cz/slozka/stranka/sekce/typ/id (Už implementováno) První dva typy jsem se pokusil přidat: RewriteEngine On RewriteBase /slozka RewriteRule ^([^/]*)$ index.php?p=$1 [NC,L] RewriteRule ^([^/]*)/([^/]*) index.php?p=$1§ion=$2 [NC,L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&id=$3 [NC,L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&type=$3&id=$4 [NC,L] S přidáním prvních dvou přepisů mi ale přestali fungovat ty dva, které jsem tam už měl. A co se týče CSS souboru. I když použiju absolutní adresu, css se nenačte. Schválně jsem si zkusil otevřít zdroják stránky přímo v prohlížeči a kliknout si na adresu (jestli se zobrazí css soubor, je všechno v pořádku a chyba je někde jinde). Adresa mě zavedla na hlavní stránku. Jde o defaultní chování v případě, že se uživatel snaží načíst něco, co neexistuje. Problém bude v tom, že CSS soubor mám uložený ve dvou podadresářích, takže adresa vyhovuje přepisu c). Jde nějak zakázat přepis v případech, kdy odkaz vede na existující soubor? Update: Prozatím jsem odstranil první dva přepisy (a,b) a přidal podmínky. RewriteEngine On RewriteBase /slozka RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&id=$3 [NC,L] RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&type=$3&id=$4 [NC,L] CSS funguje jak má. Problém je ale s adresami, které vyhovují přepisu "a" a "b" Ah, tak jsem zjistil že RewriteCond se vztahuje jen na následující jeden přepis. Vše jsem doladil do této podoby: RewriteEngine On RewriteBase /wot_guide RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]*)$ index.php?p=$1 [NC,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]*)/([^/]*)$ index.php?p=$1 [NC,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&id=$3 [NC,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1§ion=$2&type=$3&id=$4 [NC,L] Funguje jak CSS, tak přepis adres, tak původní "nepěkné" adresy. |
||
Davex Profil |
Lorin:
„Co se kořenové adresy týče, myslí se tím od kořene určeného v RewriteBase nebo kořene webu jako takového?“ Na serveru se zpracovává RewriteBase a přepisovací pravidla nezávisle na tom, co se děje s odkazy v prohlížeči, takže kořenovou adresou v odkaze se rozumí od kořene webu.
„Zjistil jsem, že na stránce se vyskytují ještě další typy odkazů.“ Co to třeba zjednodušit tak, že se celá adresa předá skriptu a jednotlivé hodnoty z ní se přečtou až v něm? Viz Řešení některých častějších problémů (FAQ) » Univerzální obecné pravidlo. |
||
Časová prodleva: 13 let
|
0