Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mod_rewrite] przepisywanie metody GET, wyszukiwarka
diniox
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 6.04.2008

Ostrzeżenie: (0%)
-----


Problem wydaje się być powszechny ale o dziwno nic na ten temat znaleźć nie mogę więc może Wy pomożecie.
Mam wyszukiwarkę w PHP czyli standardowo:
  1. <form method="get" action="../szukaj.php">
  2. <div><input name="q" type="text" id="szukaj" /></div>
  3. <div><input type="submit" value="Szukaj" /></div>
  4. </form>

Tak więc po wciśnięciu przycisku Szukaj pokazuje mi się brzydki URL w stylu http://localhost/szukaj.php?q=__WPISANE_SLOWO__. A chciałbym żeby ten adres wyglądał tak: http://localhost/szukaj/__WPISANE_SLOWO__.
W internecie jest mnóstwo przykładów przepisania odwrotnego czyli mapowania "ładnego URL" na plik.php z QUERY STRING-iem. Wymyśliłem, że to powinno wyglądać jakoś tak:
Kod
RewriteRule ^szukaj.php\?q=(.*) /szukaj/ [L,R]

Ale to nie działa. Przekierowanie nie występuje. Jak usuwam \?q=(.*) to jest OK ale przecież to musi zostać bo w szukaj.php wyłapuje $_GET['q']. Proszę o pomoc.

Ten post edytował diniox 9.08.2008, 11:54:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qBK
post
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 9.01.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Jeśli dobrze zrozumiałem, chcesz żeby w pasku adresu widniało np. http://localhost/szukaj/pralka ?

Teoretycznie takie coś powinno działać
RewriteRule ^szukaj\.php\?q=(.*) /szukaj/$1 [L,R]
(backlashash przed .php, bo kropka to znak specjalny, chociaż bez niej też by działało, bo kropka zastępuje dowolny znak -ale wtedy szukaj8php zamiast szukaj.php też by przeszło)

$1 to pierwsza zmienna wyłapana z wyrażenia, kolejna do użycia byłaby $2 itd.; do zmiennych wrzucane jest to co jest grupowane w nawiasy, czyli np. przy dwóch zmiennych miałbyś coś takiego:

RewriteRule ^osoba\.php\?imie=(.*)&nazwisko=(.*) /osoba/$1,$2 [L,R]

Niestety to co napisałem powyżej nie działa u mnie na Apache'u, a problemy stwarza znak zapytania. To znaczy

RewriteRule ^szukaj\.php\?q=(.*) /szukaj/$1 [L,R]
wywołanie 'http://localhost/szukaj.php?q=aaa' nie działa - to znaczy, nie ma redirecta
---------------
RewriteRule ^szukaj\.phpq=(.*) /szukaj/$1 [L,R] // na chama wywalony znak zapytania
wywołanie 'http://localhost/szukaj.phpq=aaa' ładnie działa, przekierowuje do /szukaj/aaa

Czy mógłby ktoś mnie oświecić, dlaczego znak zapytania w regexpie (po bożemu, poprzedzony backslashem) sprawia że takie coś nie przechodzi? Apache 2.2.6, WinXP. Pisałem wczoraj z nieco podobnym problemem który stwarzał dwukropek i też nie otrzymałem odpowiedzi.

Ten post edytował qBK 9.08.2008, 00:24:18
Go to the top of the page
+Quote Post
diniox
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 6.04.2008

Ostrzeżenie: (0%)
-----


Cytat(qBK @ 9.08.2008, 01:22:04 ) *
Niestety to co napisałem powyżej nie działa u mnie na Apache'u, a problemy stwarza znak zapytania. To znaczy

RewriteRule ^szukaj\.php\?q=(.*) /szukaj/$1 [L,R]
wywołanie 'http://localhost/szukaj.php?q=aaa' nie działa - to znaczy, nie ma redirecta
---------------
RewriteRule ^szukaj\.phpq=(.*) /szukaj/$1 [L,R] // na chama wywalony znak zapytania
wywołanie 'http://localhost/szukaj.phpq=aaa' ładnie działa, przekierowuje do /szukaj/aaa

A właśnie o to chodzi, że nie działa :-). Wydaje się być sensownie napisana reguła, wyrażenie regularne jest OK a jednak przeszkadza mu ten ?.
Cytat(tommy4 @ 9.08.2008, 09:10:42 ) *
skoro chcesz mieć http://adres/szukaj/ to wrzuć metodę post.

No właśnie chcę http://adres/szukaj/aaa lub http://adres/szukaj/aaa/ Tutaj raczej jak w każdej normalnej wyszukiwarce IMHO lepiej użyć GET.

Cytat(tommy4 @ 9.08.2008, 09:10:42 ) *
Poczytaj o RewriteCond %{QUERY_STRING}

Już parę dni temu czytałem bo myślałem, że może tutaj coś z tym warunkiem. Ale nie udało mi się samemu nic wymyślić jak można by QUERY_STRING i wykorzystać go w regule.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 09:52