Autor Zpráva
mr.xik
Profil *
Dobrý večer,

již nějakou dobu se snažím přijít na kloub jednomu problému. Mám na webu vyhledávání v php (search.php?hledano=hledany+vyraz) a aplikoval jsem na něj rewrite přesměrování pro hezčí url ( hledano/hledany+vyraz ).

Mám ale problém. Když vyhledávám pouze jedno slovo tak vše funguje jak má, ale pokud přidám slova dvě tak rewrite vrátí pouze jedno slovo a celé vyhledávání tím znehodnotí ( nevyhledá se slovní spojení ale pouze to jedno slovo což je mnohem více výsledků než při zadání dvou slov )

Pro rewrite používám následující přesměrování:
RewriteEngine On

RewriteCond %{QUERY_STRING} ^hledano=([a-z-]+)
RewriteRule ^search\.php$ /hledano/%1? [R=301,L]

RewriteRule ^hledano/([a-z-]+)$ /search.php?short=1&hledano=$1 [L]

a vyhledávání klasicky přes php:
$hledano = mysql_real_escape_string($_GET["hledano"]);
    $s = 'hledano';

$sql="SELECT * FROM data WHERE ".$s." LIKE '%".$hledano."%'";
    $result = mysql_query($sql);
    if(mysql_num_rows($result) > 0){
        ....

Takže ve zkratce: Když vypnu mod_rewrite vše se vyhledává jak má (slovní+spojení) ale pokud jej zapnu vyhledává se pouze (slovní). Mnohokrát děkuji za rady a tipy - jsem již bezradný.
juriad_
Profil *
[a-z-] nahraď za tečku. Nechceš omezení na podobu hledaneho vyrazu. Mezera neni pismeno, a proto zapamatovany vyraz komci pred mezerou.
Kajman
Profil
juriad:
[a-z-] nahraď za tečku

Na řádku 3 raději za [^&]
Na řádku 4 si nejsem jistý, zda nebude potřeba i flag NE.
Davex
Profil
mr.xik:
Přesměrování parametrů vyhledávání na cestu bych se obloukem vyhnul, protože pro escapování parametrů platí trochu odlišná pravidla než pro escapování znaků v cestě. S některými znaky pak mohou nastat problémy, protože je mod_rewrite nebude při přesměrování správně escapovat.

?hledano=hledany+vyraz by snad také mohla být pěkná adresa, nebo ne?

A proč by vlastně výsledky hledání měly být na pěkné adrese?
mr.xik
Profil *
[#3] Kajman
Mnohokrát děkuji, řešení s vyhledáváním funguje.

Řeším ale ještě problém kdy vypisuji název podstránky z databáze a nahrazuji ji za hezkou url. Problém opět nastává, když název podstránky je složen z více než jednoho slova. Využívám kód:
RewriteRule ^([a-z-]+)$ /stranka.php?short=1&url=$1 [L]

[#4] Davex
Na totmto jednom projektu mi to příjde právě mnohem lepší než vypis pomocí search.php?hledano=...
Kubo2
Profil
mr.xik:
Problém opět nastává
Pretože + nemáš zaradené v regulári. Skús ho tam pridať:

RewriteRule ^([a-z-\+]+)$ /stranka.php?short=1&url=$1 [L]

A pozri sa vyššie na odpovede.
mr.xik
Profil *
Kubo2:
aha omlouvám se, to stejné je tedy pokud tomu dobře rozumím udělat i s čísly 1-9? Děkuji za odpověď.
Kubo2
Profil
mr.xik:
aha omlouvám se, to stejné je tedy pokud tomu dobře rozumím udělat i s čísly 1-9?
Predpokladám, že áno, ale osobne radšej používam množinu (skupinu) \d, obsahujúcu rozsah prirodzených čísel [0-9], čiže asi takto:

RewriteRule ^([a-z\-\+\d]+)$ /stranka.php?short=1&url=$1 [L]
mr.xik
Profil *
[#8] Kubo2
Mnohokrát Vám děkuji!! A také všem ostatním.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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