Autor Zpráva
wabi
Profil *
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/
což moje pravidlo zvládne, ale chtěl bych, aby toto lomítko nebylo součástí proměnné, tzn. aby

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
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 *
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
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 *
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

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0