Autor Zpráva
filiphk
Profil
Ahoj,

na www.filda.cz/vyznam-jmen mám vyhledávání jmen, kde adresa po odeslání dotazu získá např. tuto podobu:

http://www.filda.cz/vyznam-jmen?hledat=dotaz&jmeno=marcela

Zajímalo by mě, zda je možné např. pomocí Rewrite v .htaccesu ji přepsat do této podoby:

http://www.filda.cz/vyznam-jmen/marcela

Zkoušel jsem pár příkladů z Mikeova blogu, ale zatím jsem nebyl úspěšný.
peta
Profil
tema se netyka php
diskuse - jak neco udelat

Ano, mozne to je.
filiphk
Profil
Omlouvám se, pokud jsem příspěvek zařadil do nesprávné sekce.
Vím, že je to možné, ale zajímalo by mě právě jak to udělat.
Kajman_
Profil *
V php skriptu, co zpracovává vyznam-jmen si udělejte dle došlých parametrů přesměrování přes hlavičku location na chtěnou výslednou adresu.
filiphk
Profil
Kajman_
Děkuji za radu, vyzkouším.

Edit: Tak bohužel to nefunguje, hazí mi to pak chybu 404.
DJ Miky
Profil
Při odeslání formuláře přesměruj požadavek (viz Kajman_) na
filda.cz/vyznam-jmen/jméno
Pak ještě musíš vytvořit pravidlo pro přepis té adresy na skript, který ten význam zobrazí, třeba takhle v .htaccess:
RewriteEngine On
RewriteRule vyznam-jmen/(.+)$ skript.php?jmeno=$1
Místo skript.php si dosaď jméno skriptu, který to zobrazuje.
filiphk
Profil
Díky za rady, už se mi to povedlo rozchodit následovně, ale jen částečně:

RewriteRule ^jmeno/([a-z]*)$ vyznam-jmen?hledat=dotaz&jmeno=$1


Problémy:
1. u přesměrované adresy nefungují kaskádové styly
2. pokud zadám např. jméno Jan, přesměruje se na http://www.filda.cz/jmeno/jan, to je v pořádku, ale při dalším dotazu už se nic nevyhledá a za adresu se opět připojí řetězec.
Radim Hejhal
Profil
1. při vkládání stylů musíš upravit zanoření adresáře podle struktury webu vs struktury přeměněné URL. Takže třeba něco jako
<link rel="stylesheet" href="../../css/styles.css" media="all" type="text/css" />
../ značí "o úrověň výš", takže vyskákej až do části, kterou má přetvořená i skutečná adresa společnou a pak teprve zadej adresu vedoucí odtamtud ke stylům. (Aspoň myslím že je to tak :o))
2. nastav správně parametr action u formuláře.
filiphk
Profil
Radim Hejhal
Tak už mi to částečně funguje, ale všechny odkazy jsou teď ve tvaru např. http://www.filda.cz/jmeno/basne namísto http://www.filda.cz/basne.
Vím, že se musí upravit cesta k css souboru, přesně jak píšeš, jenže když ji změním pro tu přetvořenou adresu, tak mi pak zas css soubor nebude fungovat pro skutečné adresy. To samé platí i o odkazech.

Edit: Vyřešeno, do odkazů stačilo na začátek přidat /.
filiphk
Profil
Přepsání adresy už mi funguje, za což děkuji všem, kteří mi pomohli. Narazil jsem však na jeden problém:

Pokud někdo zadá do formuláře jen nepovolené znaky (např. 1234), které se při odeslání odstraní, dojde k přesměrování na adresu http://www.filda.cz/jmeno/ (nic za posledním lomítkem), což je vyhodnoceno jako chyba 404.

Šlo by to prosím nějak ošetřit, že pokud nebude za lomítkem nalezeno žádné jméno, dojde k přesměrování na adresu http://www.filda.cz/vyznam-jmen ?

K přepsání adresy používám toto pravidlo:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^jmeno/([A-Za-z]+)$ vyznam-jmen?hledat=dotaz&jmeno=$1 [L]
Kajman_
Profil *
Pozor na to, že a-z Vám nesežere jméne s diakritikou. Nenalezené jméno zjistíte až v php, takže přesměrování opět až tam.
filiphk
Profil
Kajman_
To už mám ošetřeno, protože dotaz v proměnné je zbaven diakritiky ještě před tím, než dojde k přesměrování, ale i tak děkuji za upozornění.

Jediné, co snad zbývá ošetřit jsem uvedl v předešlém příspěvku.
filiphk
Profil
Napadlo mě udělat soubor 404.php, ve kterém by byla podmínka, že pokud předchozí adresa byla http://www.filda.cz/jmeno/, došlo by k přesměrování na http://www.filda.cz/vyznam-jmen, jinak na index. Myslím však, že toto řešení asi nebude to nejlepší, navíc zatím nevím, jak ho zrealizovat, takže pokud by někdo měl jiný návrh, byl bych mu moc vděčný.

Snažil jsem se to vyřešit takto, ale výsledkem byla pouze smyčka při přesměrování:
$redir = $_SERVER['HTTP_REFERER']; if (eregi("http://www.filda.cz/jmeno/", $redir)) {header('location: http://www.filda.cz/vyznam-jmen',1,301); exit;};
filiphk
Profil
Tak nakonec stačilo jen změnit ^jmeno/([A-Za-z]+)$ na ^jmeno/(.*)$:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^jmeno/(.*)$ vyznam-jmen?hledat=dotaz&jmeno=$1 [L]


Děkuji Kajmanovi, jelikož díky jeho upozornění mě to trklo. :c)

Vyřešeno, zamykám.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0