Autor | Zpráva | ||
---|---|---|---|
Pavel Straka Profil |
#1 · Zasláno: 1. 11. 2012, 13:42:19
Dobré odpoledne.
Na webu používám pěkné URL adresy velmi jednoduchým způsobem. Pokud URL adresa obsahuje řetězec "inzerat" dojde k přesměrování na stránku inzerat.php, s tím, že v proměnné $_GET["id"] je předáno ID inzerátu. ID inzerátu je nadpis inzerátu převedný na formát použitelný v URL. (Mainská mývalí koťata -> Mainska-myvali-kotata). V opačném případě dojde k přesměrování na stránku inzeraty.php, s tím že v proměnné $_GET["id"] je předáno ID kategorie. (Kočky -> Kocky) Toto zajišťuje tento kód .htaccess: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/inzerat/ RewriteRule ^([^/]+)/?$ inzeraty.php?kat=$1 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^inzerat/([^/]+)/?$ inzerat.php?id=$1 [L] RewriteRule ^(.*/)?index.html$ /$1 [R=301,L] RewriteRule ^(.*/)?index.htm$ /$1 [R=301,L] RewriteRule ^(.*/)?index.php$ /$1 [R=301,L] RewriteRule ^(.*/)?default.asp$ /$1 [R=301,L] RewriteRule ^(.*/)?default.aspx$ /$1 [R=301,L] Nyní bych chtěl ale celý systém vylepšít a to dvěma způsoby: 1. V URL příslušného inzerátu zobrazovat ještě prodej/nákup a příslušnou kategorii - tzn. např. www.adresa.cz/Prodam/Kocky/Mainska-Myvali-kotata . Jaký je nejlepší způsob realizace? Naivně jsem si myslel, že do databáze k příslušnému inzerátu do sloupce url (zde jsou uloženy ID inzerátu) uložím celý tento řetězec to znamená typ_inzerátu/kategorie_inzerátu/nadpis_inzerátu. Samozřejmě to ale není možné.
2. Druhý problém je ještě trochu složitější. Na webu mám jednoduché vyhledávání. Člověk zadá kategorii, typ (prodám/koupím) a několik dalších parametrů (nyní nepodstatných) a formulář je pak opět odeslán na stránku inzeraty.php s hledanými parametry jako parametry $_GET (inzeraty.php?kategorie=Kocky&typ=prodam). Jakým nejjednodušším způsobem upravím vyhledávání tak, aby adresa byla inzeraty/prodam/Kocky za předpokladu předání i dalších parametrů klasickým způsobem (inzeraty/prodam/Kocky&hledany_text=Mainska) Děkuji všem za ochotu pomoci. |
||
Davex Profil |
ad 1) Nejvhodnější by bylo Univerzální obecné pravidlo a zbytek zařídit v PHP skriptu.
ad 2) Pokud chceš pěknou adresu a vyhledávání udělat jako filtr, tak se musí po odeslání formuláře přesměrovat, nejlépe ve vyhledávacím skriptu pomocí header() . Vyhledávaný text bych necpal za každou cenu do cesty a nechal ho jako parametr pro vyhledávání v kategorii - /Prodam/Kocky?text=Mainska.
|
||
Pavel Straka Profil |
#3 · Zasláno: 1. 11. 2012, 23:59:10
1. Mohl bys mi prosím přiblížit tuto radu:
Pokud je cílem adresa ve tvaru example.com/jedna/dva/tri, není nic snazšího než si proměnnou $_GET["url"] rozsekat do pole (adresa bude přepsána na example.com?url=jedna/dva/tri): $adresa = explode("/", $_GET["url"]); Jednotlivé části jsou potom v poli $adresa s příslušnými indexy. Jak toto aplikuji na můj případ? 2. Také bohužel nerozumím. Po odeslání formuláře mám pomocí Header("Location:...") přesměrovat na adresu typu /Prodam/Kocky?text=Mainska&dalsi_parametry? A jak bude v tomto případě vypadat upravený .htaccess? Děkuji za ochotu. |
||
Tori Profil |
#4 · Zasláno: 2. 11. 2012, 01:05:10
Pavel Straka:
„Po odeslání formuláře mám pomocí Header("Location:...") přesměrovat na adresu typu /Prodam/Kocky?text=Mainska&dalsi_parametry?“ Ne, naopak. Odesláním formuláře dostanete pole parametrů a hodnot (např. /Prodam/Kocky?text=Mainska&barva=zelvovinova&PP=ano ) a Davex vám radí používat spíš takovouhle URL. Pokud byste ale chtěl, aby se po odeslání formuláře zobrazila „pěkná adresa“, např. /Prodam/Kocky/Mainska-myvali/zelvovinova/s-prukazem , musel byste si tuto adresu poskládat podle údajů z formuláře a přesměrovat na ni. Ten druhý způsob má trochu nevýhodu v tom, že abyste mohl podle toho zadání vyhledat inzeráty, musíte dělat další věci navíc a buď si před přesměrováním ukládat údaje z formuláře do session, nebo tu novou adresu zase nějak rozebírat na pole parametrů.
|
||
Pavel Straka Profil |
#5 · Zasláno: 2. 11. 2012, 15:12:09
Tori: Děkuju za pomoc, ale pořád bohužel nerozumím. Jak si mám takovou adresu poskládat a jak mám upravit .htaccess, aby přesměrování na ní bylo funkční?
|
||
Davex Profil |
#6 · Zasláno: 2. 11. 2012, 23:01:36
Pavel Straka:
„Jak toto aplikuji na můj případ?“ Místo rozebírání adresy pomocí složitých pravidel mod_rewrite se použije jen toto jedno jednoduché pravidlo pro předání celé cesty do PHP skriptu a hodnota se zpracuje až v PHP skriptu, který zařídí zbytek - zobrazení správné stránky a vygenerování pěkných odkazů podle požadované struktury. „Jak si mám takovou adresu poskládat“ Pokud máš definován typ a kategorii jednotlivých inzerátů, tak zjednodušeně $adresa = '/' . $inzerat['typ'] . '/' . $inzerat['kategorie'] . '/' . $inzerat['id']; Případně si můžeš poskládání zobecnit a napsat si na to funkci. „jak mám upravit .htaccess, aby přesměrování na ní bylo funkční?“ Z původních pravidel necháš jen přesměrování stránek index a default a ostatní přepisovací pravidla nahradíš univerzálním pravidlem. |
||
Pavel Straka Profil |
#7 · Zasláno: 2. 11. 2012, 23:20:04
Děkuju za pomoc, před chvíli jsem si toto také uvědomil a uz aplikoval.
|
||
Časová prodleva: 12 let
|
0