Zur Navigation

Suchfunktion per GET

1 Thomas (Gast)

Hallo zusammen,
ich habe folgendes Problem: Ich rufe Seiten über index.php?url_alias=xy auf, angezeigt werden soll xy.html. Das funktioniert mit folgendem Code gut:

Code:
RewriteEngine On

RewriteRule index.html$ /index.php [PT]
RewriteRule ^([0-9]+)-meine-freunde.html$ /index.php?url_alias=meine-freunde&buddy2_fK=$1
RewriteRule ^([0-9]+)-freunde-finden.html$ /index.php?url_alias=freunde-finden&buddy2_fK=$1
RewriteRule ^([0-9]+)-einladung.html$ /index.php?url_alias=einladung&budRelID=$1
RewriteRule ^([0-9]+)-write.html$ /index.php?url_alias=write&to_fK=$1
RewriteRule ^([0-9]+)-([0-9]+)-thema.html$ /index.php?url_alias=thema&pag_page=$1&threadID=$2
RewriteRule ^([0-9]+)-profil.html$ /index.php?url_alias=profil&profileID=$1
RewriteRule ^([0-9]+)-forum.html$ /index.php?url_alias=$1-forum&forumID=$1
RewriteRule ^reply-([0-9]+)-pms.html$ /index.php?url_alias=pms&reply=1&msgID=$1
RewriteRule ^([0-9]+)-pms.html$ /index.php?url_alias=pms&msgID=$1
RewriteRule ^([0-9]+)-grusskarten.html$ /index.php?url_alias=grusskarten&greetcardID=$1
RewriteRule ^([-0-9a-zA-Z]+)-registrierung.html$ /index.php?url_alias=registrierung&activate_code=$1
RewriteRule ^([-0-9a-z]+).html$ /index.php?url_alias=$1

ErrorDocument 404 /errordoc/error404.html


Nun will ich eine Suchfunktion über GET implementieren (PHP), also z.B. suche.html?searchfield=xy&search-btn=Finden für index.php?url_alias=suche&searchfield=xy&search-btn=Finden

Probiert habe ich:


Code:

RewriteRule ^suche.html?searchfield=([^&]*)&search-btn=Finden$ /index.php?url_alias=suche&searchfield=$1&search-btn=Finden

RewriteRule ^suche.html?searchfield=([^&]*)$ /index.php?url_alias=suche&searchfield=$1

(Zeile 3+4, falls per Return und nicht per Button bestätigt wird.)

Das funktioniert leider nicht, bei $_GET kommt nur der url_alias an.
Weiss jemand Rat?
Vielen Dank schon mal,
Thomas

20.05.2008 14:09

2 Jörg

Hallo Thomas,

das Muster einer RewriteRule enthält nur Verzeichnis- und Dateinamen - den Query String kannst du aber in einer RewriteCond berücksichtigen (und den dort gespeicherten Wert mit %1 wieder aufgreifen). Probier's mal so:

RewriteCond searchfield=([^&]*)&search-btn=Finden$
RewriteRule ^suche\.html$ /index.php?url_alias=suche&searchfield=%1&search-btn=Finden

20.05.2008 14:52 | geändert: 20.05.2008 14:52

3 Thomas (Gast)

Hallo Jörg.
Vielen Dank für die schnelle Antwort. Aber der Codeschnipsel funktioniert leider nicht, er zerschiesst mir die ganze Webseite. Muss ich den Codeteil noch irgendwie auszeichnen (per FLAGS??), damit er nur bei der suche.html greift?
Grüsse,
Thomas

20.05.2008 16:35

4 Jörg

er zerschiesst mir die ganze Webseite

Was meinst du mit "zerschießen", kannst du das etwas konkreter beschreiben?

Muss ich den Codeteil noch irgendwie auszeichnen (per FLAGS??), damit er nur bei der suche.html greift?

Nein, andere Dateinamen sollten hiervon nicht betroffen sein - auf das Pattern "^suche\.html$" passt ja nur /suche.html.

20.05.2008 16:49

5 Thomas (Gast)

kannst du das etwas konkreter beschreiben

Es werden mir nur noch Fehlerseiten angezeigt, auch bei Seiten, die eigentlich von der Regel gar nicht betroffen sein sollten...

20.05.2008 16:58

6 Jörg

Und wie lautet die Fehlermeldung?

20.05.2008 17:00

7 Jörg

Nachtrag: vermutlich ein Fehler 500 - da hatte ich wohl Tomaten auf den Augen 8/ - in dem Code fehlte noch das "%{QUERY_STRING}" - so sollte es korrekt sein:

RewriteCond %{QUERY_STRING} searchfield=([^&]*)&search-btn=Finden$
RewriteRule ^suche\.html$ /index.php?url_alias=suche&searchfield=%1&search-btn=Finden

20.05.2008 17:04

8 Thomas (Gast)

Vielen Dank nochmal, Jörg,
aber es funktioniert so noch nicht. Es werden keinen 500-Seiten mehr angezeigt, aber die Suchquery kommt immer noch nicht beim PHP-Script an.
print_r($_GET);
liefert nur :
Array ( [url_alias] => suche )

20.05.2008 17:20

9 Thomas (Gast)

... und die angezeigte URL ist:
www.xy.de/suche.html?searchfield=Test&search-btn=Finden

20.05.2008 17:23

10 Jörg

Ich hab's mal grad bei mir getestet - prinizpiell funktioniert die neue Rule - aber die letzte Rule der alten .htaccess funkt wohl dazwischen, wenn sie vor der neuen Rule aufgeführt ist - erstere sollte auch nach dem Einfügen noch an letzter Stelle stehen:

RewriteCond %{QUERY_STRING} searchfield=([^&]*)&search-btn=Finden$
RewriteRule ^suche\.html$ /index.php?url_alias=suche&searchfield=%1&search-btn=Finden
# immer an letzter Stelle:
RewriteRule ^([-0-9a-z]+).html$ /index.php?url_alias=$1

20.05.2008 17:36 | geändert: 20.05.2008 17:38