![]() |
![]() |
![]()
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: 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 |
|
|
![]() |
![]()
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 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 288 Pomógł: 12 Dołączył: 2.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
lmao jak to ma działać?
skoro chcesz mieć http://adres/szukaj/ to wrzuć metodę post. Cytat 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. Poczytaj o RewriteCond %{QUERY_STRING} Ten post edytował tommy4 9.08.2008, 08:12:49 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
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 ?. 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. 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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tutaj raczej jak w każdej normalnej wyszukiwarce IMHO lepiej użyć GET. W każdej normalnej wyszukiwarce w pasku adresu jest parametr określający wyszukiwany string. Jeśli chcesz mieć adres bez tego stringa, jak to opisałeś w pierwszym poście, to nie masz wyjścia, bo i tak masz na wstępie "nienormalną" (z przymrużeniem oka) wyszukiwarkę.Poza tym zdecyduj się czego chcesz, w pierwszym poście piszesz jedno, w drugim coś zupełnie innego. Odnośnie jednak pokazania poszukiwanego ciągu: 1) funkcja urlencode - spacje i polskie znaki fajnie zakodować, bo mogą zostać źle odczytane 2) RewriteRule ^szukaj/(.*?)$ szukaj.php?q=$1 [L,R] albo coś mniej więcej w tym stylu Ten post edytował Shili 9.08.2008, 11:52:34 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
W każdej normalnej wyszukiwarce w pasku adresu jest parametr określający wyszukiwany string. Właśnie tak chcę. Poza tym zdecyduj się czego chcesz, w pierwszym poście piszesz jedno, w drugim coś zupełnie innego. Moja pomyłka. Już poprawiłem. 2) RewriteRule ^szukaj/(.*?)$ szukaj.php?q=$1 [L,R] albo coś mniej więcej w tym stylu OK, może i w pierwszym poście zrobiłem błąd ale w następnym zdaniu wyjaśniam, że nie chodzi mi o ^szukaj/(.*?)$ szukaj.php?q=$1 tylko o odwrotną sytuację. Z tą podaną przez Ciebie (jak wcześniej napisałem) nie mam problemu - po 5 sekundach w Googlach miałbym rozwiązanie. Natomiast ja chcę przepisanie odwrotne (to chyba wynika z pierwszego przykładu w HTML) po wciśnieciu przycisku dostaje ?q=aaa a chcę rzeczy to się zmieniło na /aaa. Dokładnie tak jak zrozumiał qBK. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
O odwrotną?
Czyli aktualnie masz adres: szukaj/ala a chcesz mieć: szukaj.php?q=ala tak? To jest odwrotna do reguły którą Ci zapisałam. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
O odwrotną? Czyli aktualnie masz adres: szukaj/ala a chcesz mieć: szukaj.php?q=ala tak? To jest odwrotna do reguły którą Ci zapisałam. Cytat 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__.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 4 Dołączył: 13.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Tak na szybko to chyba w .htaccess bedzie jakos tak:
RewriteEngine On RewRewriteRule ^szukaj.php?q=(*)$ szukaj/$1 Ten post edytował mroczek 9.08.2008, 12:37:07 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak na szybko, bardzo na około i na pewno działające, sprawdziłam u siebie. Z tym że do RewriteRule w stylu ^szukaj/(.*?)$ szukaj.php?q=$1&sumbit=$2 [L] Problem z innymi wyrażeniami (pomijając znak zapytania) jest taki, że tutaj plik szukaj.php masz, a patrząc w drugą stronę: w katalogu szukaj nie masz folderu o nazwie takiej jak ciąg wyszukiwania. Ten post edytował Shili 9.08.2008, 12:40:55 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Shili: czyli nie da się tego zrobić tylko w mod_rewrite?
mroczek: identycznie rozwiązanie podał qBK (ja zresztą też tak próbowałem już wcześniej) i nie działa. Jest jakiś problem ze znakiem ? (ewentualnie z QUERY_STRINGIEM). |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że musi się dać (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Nie wiem jednak do końca jak to zrobić, podaję więc sposób który na pewno zadziała. Co do znaku zapytania spróbuj takiej składni: [\?] |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
Shili: oczywiście kod PHP jest OK ale po dodaniu .htaccess z tym co napisałeś czyli RewriteRule w stylu ^szukaj/(.*?)$ szukaj.php?q=$1&sumbit=$2 [L] (oczywiście wcześniej jest RewriteEngine On) dostaję w Apache'u 500 Internal Server Error.
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 085 Pomógł: 231 Dołączył: 12.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Napisałaś ^^
Mam nadzieję, że tego "w stylu" nie dodałeś do reguły (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 6.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
I prawie mi się udało:
Kod rewriteCond %{REQUEST_URI} /szukaj.php$ rewriteCond %{QUERY_STRING} ^q=(.*) RewriteRule ^.*$ /szukaj/%1/ [R,L] Tylko QUERY_STRING jest dalej dolepiany. Czyli mam coś takiego http://adres/szuka/aaa/?q=aaa a chciałbym http://adres/szuka/aaa/ |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 9.01.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
http://httpd.apache.org/docs/1.3/mod/mod_r...e.html#redirect - Query String Append
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 17:08 |