Autor Zpráva
Pavel Straka
Profil
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
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
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
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
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
Děkuju za pomoc, před chvíli jsem si toto také uvědomil a uz aplikoval.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0