![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 168 Pomógł: 1 Dołączył: 19.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chciałem zmienić format linków na stronie. Mam taką regułę: RewriteRule ^osoba/(.*)/(.*)/?$ index.php?modul=Ranking&file=osoba&osoba=$1 [NC,L] Działa mi dla takiego czegoś: domena.com/2324/imie-i-nazwisko Natomiast po wpisaniu domena.com/2324/imie-i-nazwisko/ zachowuje się jakby nie był przekazywany nr osoby (tu 2324) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Weź swoją wersję i walnij var_dump($_GET) a Cię olśni. Używanie (.*) w większości przypadków jest dobrym rozwiązaniem, ale nadużywanie czasem nie popłaca. Nie wierzysz? To zmień regułę swoją minimalnie do postaci bardziej sensownej, bo wskazującej, że pierwszy parametr to tak naprawdę id liczbowe:
RewriteRule ^osoba/([0-9]+)/(.*)/?$ index.php?modul=Ranking&file=osoba&osoba=$1 [NC,L] Teraz owy końcowy slash nie będzie miał wpływu na zmienną $_GET. Czemu tak jest? To wina tak naprawdę ogromnej zachłanności (.*) . Sprawiło to, że cały link został uznany za pierwszy parametr i nie podzieliło go na dwie części. Właściwie to podzieliło, ale w nieoczekiwany dla Ciebie sposób, który zaraz wyjaśnię. (.*) szuka zawsze najszerszego możliwego pasującego wzorca. Po braku końcowego / wzorzec podzielił adres na $1 = 2324 $2 = imie-i-nazwisko Ale gdy / na końcu dostał to: $1 = 2324/imie-i-nazwisko $2 = ciąg pusty i dla drugiego przypadku na końcu / nie istniał. "Zjadło" go jako "rozdzielacz" pomiędzy dwoma (.*), czyli nieszczęsny slash, który obwiniałeś niesłusznie. Całość więc pasowała do wzorca (IMG:style_emoticons/default/smile.gif) Oznaczę mocno co Twoja reguła uznała za slash pomiędzy (.*): 2324/imie-i-nazwisko/ To nie problem slasha w środku reguły, ale zachłanności (.*) i niestety trzeba zwracać uwagę kiedy się tego używa. Weź przykładowo na swojej starej regule przetestuj: domena.com/2324/imie-i-nazwisko/kolejny-fake/by/pokazac/sedno/problemu (IMG:style_emoticons/default/smile.gif) Też podzieli źle i zdziwisz się co znajdziesz jako $1 (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 20:26 |