Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mod_rewrite] Przyjazne linki i pętla przekierowań.
Forum PHP.pl > Forum > Serwery WWW
thek
W serwisie był kiedyś stary format paginacji z użyciem GET, czyli:
www.domena.pl/podstrona.php?strona=4
Oczywiście przerobiłem to do ładnej formy, czyli:
www.domena.pl/podstrona,4.php
ale fizycznie korzystałem wciąż z tych samych plików, więc zastosowałem regułki w stylu:
[APACHE] pobierz, plaintext
  1. # przepisuje wywołanie z GET na nice url ze statusem 301
  2. # bez L też działa, ale dla pewności, że zakończy tu i od nowa poleci po regułach...
  3. RewriteCond %{QUERY_STRING} ^strona=([0-9]+)$
  4. RewriteRule ^podstrona.php$ /podstrona,%1.php? [R=301,L]
  5. # a tu wskazuję, by taki nice url wciąż korzystał ze starego wywołania
  6. RewriteRule ^podstrona,([0-9]+).php$ podstrona.php?strona=$1 [L]
[APACHE] pobierz, plaintext

Na starym hostingu działało to, ale niestety przy przenosinach okazało się, że na nowym całość się zapętla, choć flaga L powinna zatrzymać przetwarzanie reguł. Problem w tym, że następuje wciąż przekierowanie po drugiej z reguł i całość wpada w pętlę. Gdybym usunął pierwszą regułę (z warunkiem) - zadziała. Ale chciałbym tego uniknąć, gdyż ze względów SEO chcialbym użytkownikom dać możliwość wejścia na stronę w przypadku użycia starego formatu adresu.
erix
Czasem tak się zdarza, że pomimo pierdołowatych rozwiązań, wpada w pętle i lepiej skryptem przekierowywać. Pomijam już fakt kiepskeij przenośności pomiędzy daemonami.

Spróbuj tak:
[APACHE] pobierz, plaintext
  1. RewriteCond %{QUERY_STRING} ^strona=([0-9]+)$
  2. RewriteRule ^podstrona.php$ /podstrona,%1.php? [R=301,L]
  3.  
  4. RewriteCond %{QUERY_STRING} !^strona=([0-9]+)$
  5. RewriteRule ^podstrona,([0-9]+).php$ podstrona.php?strona=$1 [L]
[APACHE] pobierz, plaintext
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.