Autor Zpráva
kuxa
Profil
Zdravím,
vím, že to tu už nespočetněkrát bylo, a na googlu je toho taky spousta, ale nikde jsem nic nenašel. S .htaccessem teprve začínám, buďte prosím trpělivý.
Chci si udělat hezké url, aby dělali následující:
- web.cz/soubor.php by byl web.cz/soubor
- web.cz/slozka1/slozka2/atd/soubor.php by byl web.cz/slozka1/slozka2/atd/soubor
- web.cz/soubor.php?parametr1=neco&parametr2=neco by bylo web.cz/soubor/parametr1/neco/parametr2/neco
Děkuji moc!

P.S.: Samozřejmě by to fungovalo i na jiné soubory než jen soubor.php :D
lionel messi
Profil
kuxa:
Prvé dva body by mal riešiť návod z FAQ: Řešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony.

Bod tri bude máličko komplikovanejší. Ale kombinácia použitia riešenia odkázaného vyššie a premenných z regulárov by mala fungovať.
Keeehi
Profil
kuxa:
Takovéto komplexní routování bych vůbec neprováděl pomocí .htaccess. Vžechno bych si pomocí jediného pravidla přesměroval na index.php a obsluhu načítání jednotlivých stránek bych řešil tam.

RewriteRule ^(.*)$ index.php
Taps
Profil
kuxa:
http://mike.treba.cz/mod_rewrite-a-hezke-url/
kuxa
Profil
lionel messi:
Skvěle, děkuju!!! První dvě varianty už opravdu fungují.
Tu druhou jsem zkusil následovně
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)/(.*)/(.*)$    $1.php?$2=$3    [L]
Což by podle mě mělo stranka/neco/nekdo přehodit na stranka.php?neco=nekdo, ale nefunguje to :'(
1. Poradíš mi prosím, jak na tohle?
2. Poradíš mi prosím, jak aby to fungovalo pro libovolnej počet GET parametrů?
Děkuji!

edit:
tak ono to funguje, akorát hodí 404 když parametr není :D
kuxa
Profil
Poradíte mi tedy prosím, jak aby to fungovalo při libovolném počtu parametrů (0-x)? Děkuji
Corwin
Profil
kuxa:

ahoj, lepší než hromada GET parametrů bude metoda, kterou už navrhoval Keeki. já bych tam tedy ještě přidal název proměnné:

RewriteRule ^(.*)$ index.php?path=$1 [L]

pak tedy reálná url bude vypadat jako "index.php?path=neco/neco-jineho/jeste-neco/" a bude rewritována na "/neco/neco-jineho/jeste-neco/" v PHP to pak funkcí explode rozbiješ podle lomítka. hotovo :-)
kuxa
Profil
Corwin:
Děkuji! Jestli tě teda správně chápu, rozbiju si tu url v index.php (nebo nějakém jiném přehazovacím skriptu) podle lomítka, a vznikne mi pole. To potom nějak projedu cyklem (asi while), přiřadím názvy parametrů k hodnotám.
Ale co potom?
Protože jestli dám přesměrování na adresu získanou z rozbití, tak se bude v adresním řádku zobrazovat "hnusná" adresa, ne?

edit: Už jsem to asi pochopil. Vy si myslíte, že ty gety potřebuju jen na indexu, ne? V tom případě by bylo takové řešení ideální. Ale já potřebuju index.php?neco=nekdo, uzivatele.php?id=cislo atd.
Corwin
Profil
kuxa:

ale ne, proč tak složitě :-)

1. rozbiješ proměnnou $_GET["path"] a uložíš si pole např. $tpl["path"]
2. nic už nikam nepřiřazješ, pracuješ s hondotami $tpl["path"][0] / $tpl["path"][1] atd.
3. žádné přesměrování nepotřebuješ, odkazy povedou na hezkou verzi url, škaredá adresa se nikde nezobrazí, od nikud na ni nesmí být odkazováno.
4. je potřeba se zamyslet, kdy ty hezké url vlastně mají smysl :-) např.

index.php?page=user&id=1 => /user/1/ nemá smysl, stačí bohatě /user/?id=1
index.php?category=zpravy&sub_category=krimi => /zpravy/krimi/ tohle smysl má.
index.php?category=zpravy&sub_category=krimi&page=2 jak už jsi asi pochopil, page zde zase smysl nemá.
Keeehi
Profil
Hlavně žádné přesměrování na uživatele.php dělat nebudeš. Protože to či chceš ty je
include('uživatele.php')
Tedy vždy se zavolá index.php. v něm si rozparsuješ tu URL a data si připravíš do pěkného pole. A pak už jen includneš ten script, který s tím má pracovat.
kuxa
Profil
Keeehi:
Aha, include (teda spíš require) mě vůbec nenapadl :) Díky, vyzkouším!

Corwin:
Díky, v případě, že bych všechny stránky bral přes index a načítal je GET parametry (např. index.php?page=uzivatele), tak by tvé řešení bylo ideální. Já ale potřebuji GETy i na jiných stránkách (uzivatele.php?id=1, vtipy.php?kat=3&rad=nejnovejsi atd.), takže bude ideální asi Keehiho řešení
Corwin
Profil
kuxa:

Díky, v případě, že bych všechny stránky bral přes index a načítal je GET parametry (např. index.php?page=uzivatele), tak by tvé řešení bylo ideální. Já ale potřebuji GETy i na jiných stránkách (uzivatele.php?id=1, vtipy.php?kat=3&rad=nejnovejsi atd.), takže bude ideální asi Keehiho řešení

no... tohle řešení fakt dobré není... jak psal Keehi v příspěvku hned po mě, potřebuješ index.php do kterého se budou includovat další soubory - podle get proměnné. tedy pokud bych to zkloubil s jednoduchým rewritem a rozbitím proměnné přes lomítko, tak $tpl["path"][0] bude include souboru, $tpl["path"][1] pak udělá něco jiného.

mimochodem oba dva příklady které jsi právě uvedl žádné hezké url nepotřebují. ano, "/uzivatele/" namísto "uzivatele.php" jo, ale to necheš, protože chceš všechno na index.php. a čísla ani řazení v hezkých url prostě nepotřebuješ. (fajn, hezká url pro řazení mohou mí své výjimky, ale většinou to tam prostě nechceš...)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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