mod_rewrite - RewriteRule - ustwienie regu

Konfiguracja serwerów, usług, itp.
pch0317
Posty: 22
Rejestracja: 13 marca 2009, 21:24

mod_rewrite - RewriteRule - ustwienie reguły rozpoznania odnośnika

Post autor: pch0317 »

Cześć.

Chciałbym ustalić regułę, która rozpoznaje linki typu "element?id=<liczba>".
Gdy tworzę wpisy:

Kod: Zaznacz cały

RewriteRule ^element\?id\=123$ [url]http://debian.linux.pl/[/url]
RewriteRule ^element\?id\=321$ [url]http://youtube.com/[/url]
i klikam na link

Kod: Zaznacz cały

element?id=123
lub:

Kod: Zaznacz cały

element?id=321
przekierowanie nie następuje.
Dodam, że wpis:

Kod: Zaznacz cały

RewriteRule ^element\?*$ [url]http://debian.linux.pl/[/url]
działa, ale zależy w tej sytuacji na rozróżnianiu przekierowania w zależności od ostatniej liczby w linku.

Co robię niewłaściwie?
Co trzeba zmienić?

Pozdrawiam
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

A spróbuj tak:

Kod: Zaznacz cały

RewriteRule ^element\?id=123$ [url=http://debian.linux.]http://debian.linux.pl/[/URL]

pch0317
Posty: 22
Rejestracja: 13 marca 2009, 21:24

Post autor: pch0317 »

Wiem dlaczego to nie działało.
Część URL znajdująca się za znakiem zapytania to tzw. Query String i nie jest ona włączana do stringu na którym sprawdzane są dopasowania. Po wysłaniu zapytania abc/def?ghi=jkl dopasowania będą robione tylko do części def.
Można to wyczytać w The Definitive Guide to Apache mod_rewrite (Apress) napisanej przez Rich Bowen.

Aby obsłużyć takie przypadki należy sprawdzać zmienną QUERY_STRING za pomocą RewriteCond.

Pozdrawiam
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Czyli jak wygląda teraz twój przykład?
pch0317
Posty: 22
Rejestracja: 13 marca 2009, 21:24

Post autor: pch0317 »

coś w tym stylu:

Kod: Zaznacz cały

RewriteCond %{QUERY_STRING} id=[1][2][3]$
RewriteRule ^element\?id=123$ http://debian...
RewriteCond %{QUERY_STRING} id=[3][2][1]$
RewriteRule ^element\?id=123$ http://cos...

Awatar użytkownika
timor
Beginner
Posty: 111
Rejestracja: 18 sierpnia 2009, 23:40

Post autor: timor »

Według mnie potrzebujesz takie coś:

Kod: Zaznacz cały

RewriteRule ^element\?id\=123$ [url=http://debian.linux.]http://debian.linux.pl/[/URL] [QSA]
RewriteRule ^element\?id\=321$ [URL]http://youtube.com/[/URL] [QSA]
i w zależności od tego czy regułki będą w globalnej konfiguracji vhost'a czy pliku .htaccess możesz jeszcze potrzebować / zaraz po ^

Informacyjnie: opcja QSA dodaje query string do przetwarzanego URL'a.
ODPOWIEDZ