![]() |
![]() |
![]()
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 ? |
|
|
![]() |
![]()
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
![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
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
![]() ![]() 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¶ms=$2 [L] RewriteCond %{REQUEST_URI} !^.*\.(css|png|gif|jpe?g|js)$ RewriteRule ^(.*) index.php?page=$1 [L] |
|
|
![]()
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¶ms=$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¶ms=$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¶ms=$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¶ms=$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 -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 08:24 |