Autor | Zpráva | ||
---|---|---|---|
wabi Profil * |
#1 · Zasláno: 18. 7. 2011, 12:08:06
Ahoj,
potřeboval bych vylepšit můj .htaccess, prozatím mám toto: RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|js)$ [NC] RewriteRule ^(cs|en)/(.*)/?$ index.php?page=$2&lang=$1 [NC,QSA,L] Takže to z adresy www.example.cz/cs/content udělá www.example.cz/index.php?page=content&lang=cs Jeden malý problém je v tom, že bych potřeboval, aby to registrovalo i adresy s koncovým lomítkem: www.example.cz/cs/content/ www.example.cz/cs/content www.example.cz/cs/content/ měli oba stejný obsah proměnné $_GET["page"] == "content". A potom, potřeboval bych, aby se mohl zadat i jiný typ adresy, například www.example.cz/cs/category/content a potom se jednoduše předal další parametr pro kategorii. Ale nevím jak to udělat, aby tento parametr byl jakoby nepovinný? Díky za rady! |
||
o_O Profil |
#2 · Zasláno: 18. 7. 2011, 12:30:06
Osobně bych nedoporučoval užití (.*) v případě, že se může URL dále rozrůstat (musí se pak zbytečně dodržovat pořadí, při pozdějším editování jsem s tím měl problémy).
wabi: „chtěl bych, aby toto lomítko nebylo součástí proměnné“ To dělá právě to (.*). Můžete to přepsat např. na ([a-z]+). Pokud do toho chcete zahrnout i "category", můžete k tomu přidat další závorku s ?: RewriteRule ^(cs|en)/([a-z]+)?/?([a-z]+)/?$ index.php?page=$3&lang=$1&category=$2 [NC,QSA,L] V případě, že nebude vyplněn "category" $_GET bude existovat ale bude prázdný. |
||
wabi Profil * |
#3 · Zasláno: 18. 7. 2011, 12:45:47
Díky moc, bohužel to funguje jenom pro kompletní adresy, kde jsou všechny tři parametry. Když ale je třeba adresa www.example.cz/cs/stranka , tak obsahy proměnných jsou následující:
$lang = "cs" $category = "strank" $page = "a" Upravil jsem to přidáním otazníku: RewriteRule ^(cs|en)/([a-z]+)?/?([a-z]+)?/?$ index.php?page=$3&lang=$1&category=$2 [NC,QSA,L] Ale ani to nepodává korektní výsledky, i když už je to blíž: $lang = "cs" $category = "stranka" $page = "" |
||
o_O Profil |
#4 · Zasláno: 18. 7. 2011, 12:57:07 · Upravil/a: o_O
RewriteRule ^(cs|en)/([a-z]+[/])?([a-z]+)/?$ index.php?page=$3&lang=$1&category=$2 Tato funguje tak, jak má, ovšem s menší "vadou na kráse". Při existující "category" jí přidá /. (mb_substr($category,-1)) Osobně bych to řešil 2 regulárními výrazy. RewriteRule ^(cs|en)/([a-z]+)/([a-z]+)/?$ index.php?page=$3&lang=$1&category=$2 RewriteRule ^(cs|en)/([a-z]+)/?$ index.php?page=$2&lang=$1 Opraveno |
||
wabi Profil * |
#5 · Zasláno: 18. 7. 2011, 13:02:39
Skvěle, děkuji moc! Funguje jak má!
Jen doplním, že v druhém příkladu je drobná chyba: RewriteRule ^(cs|en)/([a-z]+)/([a-z]+)/?$ index.php?page=$3&lang=$1&category=$2 RewriteRule ^(cs|en)/([a-z]+)/?$ index.php?page=$2&lang=$1 |
||
Časová prodleva: 13 let
|
0