Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mod_rewrite - parametry miedzy '/' vs. ustawione foldery
Forum PHP.pl > Forum > Serwery WWW > Apache
erix
Nie wiedzialem jak to zatytulowac, jesli zle - prosze mnie poprawic.

Mianowicie: mam rozdzielane parametry w URL-ach za pomoca '/' (nazwe to wirtualnymi folderami). Wszystko ok, zrobilem sobie przekierowanie na css-y, js-y, graficzki, itp.

wyglada to mniej wiecej tak:
Kod
Options +FollowSymLinks
RewriteEngine on

RewriteBase /

RewriteRule ^folder/(.*)$ /foldeerek/plik2.php?param=$1

RewriteRule ^css/(.*)$ /podfolder/css/$1
RewriteRule ^gfx/(.*)$ /podfolder/gfx/$1
RewriteRule ^js/(.*)$ /podfolder/js/$1

rewritecond %{REQUEST_FILENAME} !^(.+)\.css$
rewritecond %{REQUEST_FILENAME} !^(.+)\.htc$
rewritecond %{REQUEST_FILENAME} !^(.+)\.js$
rewritecond %{REQUEST_FILENAME} !^(.+)\.png$
rewritecond %{REQUEST_FILENAME} !^(.+)\.gif$
rewritecond %{REQUEST_FILENAME} !^(.+)\.jpg$
rewritecond %{REQUEST_FILENAME} !^folder/(.*)$
RewriteRule ^([a-zA-Z]+)/(.*)$ plik.php?parametr1=$1&param2=$2
# tutaj reszta parametrow przez RewriteRule


Na czym polega moj problem: otoz moge bez problemu otwierac wszystkie pliki z tych wirtuali, przekazywac parametry do plik.php, ale gdy odwoluje sie /folder/asd, to zamiast otwierac /foldeerek/plik2.php?param=asd, to otwiera mi plik.php?parametr1=asd&param2=, tak jakby ignorowal ostatnie rewritecond.

Siedzialem pare dni nad tym i nie moge, jak do tej pory, znalezc rozwiazania.

Z gory dzieki za pomoc!
siemakuba
chyba chodzi o to, ze powinieneś dołożyć flagę [L] - Last wtedy kiedy nie chcesz żeby dalej były przetwarzane regułki. Jeżeli zapytanie będzie pasowało do reguły, jego przetwarzanie zakończy się.
Spróbuj więc:
Kod
RewriteRule ^folder/(.*)$ /foldeerek/plik2.php?param=$1 [L]

być może będziesz musiał dodatkowo pokombinować z kolejnością reguł żeby wszystko działało tak jak trzeba. Widzę też, że przepisujesz odwołania do css itp. żeby działały - sprawdź czy nie wygodniej będzie ci użyć modyfikatorów -d i -s dla RewriteCond - możesz w ten sposób pomijać przetwarzanie reguł jeżeli zapytanie dotyczy istniejącego pliku folderu.

szczegóły: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
pozdr.
erix
hmm...

albo cos zle robie albo mam cos zwalone...
Daje [L] i przetwarza nastepne reguly :/

wrzucilem nastepne w komentarz i dziala (sic!)

BTW: czytalem dawno ten manual smile.gif
siemakuba
Cytat
Daje [L] i przetwarza nastepne reguly :/

hm, przetwarza nastepne, ale te, ktore sa juz po nastepnym bloku RewriteCond - mam racje? dlatego napisalem o kolejnosci ustawienia regul - moze to miec znaczenie :)

P.S. napisz co chcesz konkretnie osiagnac, wydaje mi sie ze za duzo tu kombinowania i z kazda kolejna potrzebna regulka bedzie coraz gorzej. Mozna to zrobic naprawde prosto. Moj przykladowy plik .htaccess:
Kod
    
    RewriteEngine On
    RewriteBase   /

    RewriteCond    %{REQUEST_FILENAME} !-d
    RewriteCond    %{REQUEST_FILENAME} !-s
    
    RewriteRule    ^(.*)$  index.php?request=$1 [NC,QSA]

wszystko oprocz istniejacych plikow i folderow idzie do pliku index.php w zmiennej tam jest decyzja co dalej.

pozdr.
erix
pomodzilem i...
Kod
RewriteRule ^([a-zA-Z]+)/(.*)$ plik.php?parametr1=$1&param2=$2
RewriteRule ^([a-zA-Z]+)/$ plik.php?parametr1=$1&param2=$2

Zauwazylem, ze wszystko mi psuje ta pierwsza regula. Gdy ja 'komentne', to dziala ok.

edit:
sam doszedlem do rozwiazania: zauwazylem, ze [L] jest ignorowane, gdy w rewriterule drugi parametr nie jest '-'. Wystarczylo:
Kod
RewriteRule podfolder - [L]
RewriteRule foldeerek - [L]

po pierwszych regulkach i spokoj...

prawie dwa tygodnie siedzenia, kurza twarz...
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.