Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mod_rewrite] Wykluczanie tekstu na poczatku regul
Seth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Mam taki nietypowy problem z htaccesem i RewriteRule.

Otoz mam strone, ktorej linki wygladaja tak:

www.example.com/cos/
www.example.com/cos/innego/
www.example.com/lalalalala/

I to obsluguje przez taka regule:

Kod
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.+\.(css|png|gif|jpe?g|js|ico)$
RewriteRule ^(.+) index.php?page=$1 [NC]


Wszystko trafia mi do php. Problem mam jednak taki, ze chcial bym aby w przypadku pojawienia sie np takeigo adresu:

www.example.com/action/costam/

Regula przekazywala mi to co jest po action do action.php?action=$1

Nie wiem teraz jak te obie reguly polaczyc aby jedna, w przypadku gdy na poczatku jest slowo "action" przekazywala reszte do action.php, a druga wszystko inne do index.php.

Ma ktos jakis pomysl ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bendi
post
Post #2





Grupa: Zarejestrowani
Postów: 401
Pomógł: 5
Dołączył: 14.09.2003
Skąd: Wrocław

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


Trzy uwagi jeśli można:
Rozumiem, że w poniższej linijce
Kod
RewriteRule ^action/([a-zA-Z_]+)[b][/|\\][/b]+(.*) action.php?do=$1&params=$2 [L]

użyłeś klasy znakowej żeby wprowadzić, zależność między separatorami ścieżki, więc o ile nie potrzebujesz żeby pałka "|", też była włączona do klasy to jest ona tam niepotrzebna i wtedy wg mnie powinno być:
Kod
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*\.(css|png|gif|jpe?g|js)$
RewriteRule ^action/([a-zA-Z_]+)[/\\]+(.*) action.php?do=$1&params=$2 [L]
RewriteCond %{REQUEST_URI} !^.*\.(css|png|gif|jpe?g|js)$
RewriteRule ^(.*) index.php?page=$1 [L]


Druga uwaga, to już bajer, ale zawsze coś.
Widzę, ze zdefiniowałeś po action coby brał pod uwagę zarówno duże jak i małe litery. Tutaj przychodzą mi do głowy 2 rozwiązania:
- po apache2 można użyć klasy znakowej \w
- pod każdą wersją można dodać flagę NC czyli No Case regułka wtedy będzie wyglądać tak - RewriteRule ^action/([a-z_]+)[/\\]+(.*) action.php?do=$1&params=$2 [L, NC]

Trzecia dotyczy samego mechanizmu ustawiania zmiennej param.
Tutaj jest pewne zagrożenie, że parametry przesyłane getem zostaną dołączone do niej co może wywołać dość nieoczekiwane zachowanie. Proponuję to lekko zmodyfikować:
- RewriteRule ^action/([a-z_]+)[/\\]+(.*?)\? action.php?do=$1&params=$2 [L, NC, QSA]
Jak widać dodałem 2 rzeczy - ograniczyłem regułkę do pierwszego znaku zapytania - zakładam, że tak się będą zaczynać parametry GET'owe
- dodałem flagę QSA Query String Append - czyli automatyczne dołączanie przesłanych parametrów getowych.


Kurcze ale wywód, a miało być krótko:D
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.10.2025 - 12:50