Konfiguracja serwerów, usług, itp.
pch0317
Posty: 22 Rejestracja: 13 marca 2009, 21:24
Post
autor: pch0317 » 10 lipca 2010, 11:35
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
lub:
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
Bastian
Member
Posty: 1424 Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ
Post
autor: Bastian » 11 lipca 2010, 16:18
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 » 13 lipca 2010, 13:10
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
Bastian
Member
Posty: 1424 Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ
Post
autor: Bastian » 13 lipca 2010, 19:48
Czyli jak wygląda teraz twój przykład?
pch0317
Posty: 22 Rejestracja: 13 marca 2009, 21:24
Post
autor: pch0317 » 14 lipca 2010, 13:29
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...
timor
Beginner
Posty: 111 Rejestracja: 18 sierpnia 2009, 23:40
Post
autor: timor » 18 lipca 2010, 18:54
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.