Strona 1 z 1

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

: 10 lipca 2010, 11:35
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

: 11 lipca 2010, 16:18
autor: Bastian
A spróbuj tak:

Kod: Zaznacz cały

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


: 13 lipca 2010, 13:10
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

: 13 lipca 2010, 19:48
autor: Bastian
Czyli jak wygląda teraz twój przykład?

: 14 lipca 2010, 13:29
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...


: 18 lipca 2010, 18:54
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.