Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> htaccess a kończący slash
MalyKazio
post
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)


--------------------
"Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
Go to the top of the page
+Quote Post
Neo
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 9
Dołączył: 8.08.2009
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Kod
RewriteRule ^osoba/([^/]+)/([^/]+)/?$ index.php?modul=Ranking&file=osoba&osoba=$1 [NC,L]
Go to the top of the page
+Quote Post
MalyKazio
post
Post #3





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

Ostrzeżenie: (0%)
-----


Dzięki wielkie! Działa.
A możesz mi wyjaśnić, dlaczego Twoja wersja działa a moja nie chciała?
Zgodnie z dokumentacją wychodzi na to, że w nawiasach, jako argumenty może być wszystko poza slashem, tak?

Ten post edytował MalyKazio 25.05.2010, 16:18:11


--------------------
"Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
Go to the top of the page
+Quote Post
thek
post
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jemu działa to za względu na obecność na końcu
/?$
co oznacza, że slash może, ale nie musi wystąpić na samym końcu. Cała zagadka... Sam sprawdź co oznacza zastosowanie znaku zapytania a zobaczysz smile.gif
@bottom: mój błąd... Nie zwróciłem dokładniejszej uwagi.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
MalyKazio
post
Post #5





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

Ostrzeżenie: (0%)
-----


A sam sprawdź pierwszy post. Jak widzisz w obu przypadkach występuje /?$ a jednak w pierwszym nie działało tak, jak tego oczekiwałem. Tak więc Twoja teoria pada i nie chodzi o znak zapytania na końcu, lecz o coś innego (slash'e w środku)


--------------------
"Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
Go to the top of the page
+Quote Post
thek
post
Post #6





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 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 smile.gif Też podzieli źle i zdziwisz się co znajdziesz jako $1 smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
MalyKazio
post
Post #7





Grupa: Zarejestrowani
Postów: 168
Pomógł: 1
Dołączył: 19.11.2005

Ostrzeżenie: (0%)
-----


Ale w dalszym ciągu nie był problemem brak /?$ na końcu, lecz błędna (nieodpowiednia do sytuacji) zawartość nawiasów - szczególnie pierwszego winksmiley.jpg
Pozdrawiam i dziękuję serdecznie za szersze objaśnienie problemu. Niestety htaccess, mod_rewrite i wyrażenia regularne do dla mnie czarna magia.

Ten post edytował MalyKazio 26.05.2010, 05:08:34


--------------------
"Jak Cię widzą tak Cię piszą, chyba żeś jest wielką fiszą"
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 20:18