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 (1 - 3)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Nie lepiej Ci to parsowac w php w REQUEST_URI questionmark.gif Jak dla mnie sporo latwiej - i mozna robic ze zmiennymi co sie chce smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Seth
post
Post #3





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

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


Nie chcialem tego uzywac bo po co wszystko includowac w index.php jak moge sobie ladnie oddzielic te dwie warstwy winksmiley.jpg (index.php sluzy mi do wyswietlania tresci, a action.php do akcji smile.gif).

No ale dzieki Maruszowi zaczelo dzialac :]

Ponizej jest rozwiazanie. Moze komus sie przyda:
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]
Go to the top of the page
+Quote Post
bendi
post
Post #4





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

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: 21.08.2025 - 08:24