htaccess mod rewrite nie działa flaga L

0

Witam,
mam problem z mod_rewrite na WebServ (najnowszy, chyba 2.1), ponieważ nie wszystkie flagi działają jak trzeba. Kod i opis:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/strona/[a-z]{2}/?$ [NC]
RewriteRule ^([a-z]{2})/? /strona/index.php?lang=$1 [NC,L]
RewriteRule ^([^-][a-z0-9\-]{2,})/?(/([^-][a-z0-9\-]+))?/?(/([^-][a-z0-9\-]+))?/?$ /strona/index.php?one=$1&two=$3&three=$5 [NC,L]
RewriteRule ^ /strona/ [NC,R,L]

Strona WWW znajduje się w podfolderze "strona", więc tymczasowo muszę dodawać "/strona/" do linków. Działanie jest(powinno być) takie:

  1. Sprawdzam czy ciąg po slashu to "2 znaki [a-z]" (np.: http://strona.pl/en) - jeżeli tak to linkuję do index.php?lang=en I TUTAJ NIE DZIAŁA FLAGA "L" - są wykonywane kolejne kroki

  2. Sprawdzam czy ciąg to "/cos[/cos[/cos]]", bądź prościej **[http://strona.pl/cos], [http://strona.pl/cos/cos] **lub [http://strona.pl/cos/cos/cos] I TUTAJ TEŻ NIE DZIAŁA FLAGA "L" - po poprawnym wykonaniu reguły przechodzi do kolejnej.

  3. Jeżeli poprzednie reguły się NIE sprawdzą to przejdź na stronę główną (to jakby jakiegoś linku nie było np.: http://strona.pl/bledny-link).

Mimo, to reguły wykonują się po kolei (poza wersją gdzie warunek **RewriteCond **nie został spełniony). Co ciekawe sprawdzałem działanie flag S=2, PT i nic się nie stało. Co mam zrobić żeby działało wszystko tak jak chcę?

0

ale jak Ty chcesz, żeby ta regułka Ci się wykonywała, jak ona przeczy temu, co napisałeś w RewriteCond? ..................

0

O dziwo działa :) Jako, że strona jest w podkatalogu to muszę dziwnie się odwoływać, ale %{REQUEST_URI} przekazuje do
Jak link jest http://strona.pl/pl lub http://strona.pl/pl/ to wykonuje regułkę http://strona.pl/index.php?lang=pl

Jeszcze jedno podkreślę, że jeżeli RewriteCond jest spełniony to chcę wykonać pierwszą regułę:

RewriteCond %{REQUEST_URI} ^/strona/[a-z]{2}/?$ [NC]
RewriteRule ^([a-z]{2})/? /strona/index.php?lang=$1 [NC,L]
0

Jak stronę masz w podfolderze to wywal ten rewrite cond, bo Ci mówię, że on zaprzecza reszcie reguł i to nigdy nie będzie działać i ustaw rewrite base na /strona/

0

Nie dopisałem. %{REQUEST_URI} przekazuje URI bez /strona i bez slasha (/) po słowie strona, czyli:

Dla RewriteCond muszę dać:

/strona/reszta-ciagu

A dla RewriteRule (warunku) muszę dać:

reszta-ciagu // czyli nie ma całego przedrostka /strona/
0

Robiłem wcześniej z RewriteBase /strona/, ale też mi nie działało. Teraz napisałem tak:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /strona/
RewriteRule ^(pl)/? index.php?lang=$1 [R]

I jak wpiszę /strona/pl lub /strona/pl/ to przechodzi na index.php?lang=pl. Natomiast jak dam:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /strona/
RewriteRule ^([a-z]{2})/? index.php?lang=$1 [R] 

To po wpisaniu /strona/pl lub /strona/pl/, przechodzi na index.php?lang=in <---- IN zamiast PL

Zrobiłem też tak:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /Grawerki2015/
RewriteRule ^(pl)/? index.php?lang=$1 [L] 
RewriteRule ^(index) index.php?cos=$1 [R,L]

To mi przechodzi na /strona/index.php?cos=index - czemu nie działa flaga [L] jeżeli pierwsza "reguła" jest poprawna?

P.S. O co chodzi z tym FollowSymLinks? W dodatku przed napisem może być plus, minus lub nic. O co w tym chodzi?

0

Podczepiam się pod pytanie.

0

Czy mogę prosić o pomoc bo już wszystko sprawdziłem a nadal reguły nie reagują na [L].

P.S. Rozumiem, że jak dam [R] (redirect) to przekierowuje mi stronę na dany link i wywołuje htaccess jeszcze raz. A jak daję tylko [L] to nic nie powinno się dziać później (a jednak przechodzi do kolejnej reguły - mimo że wykona też tę z flagą L).

A jak ma działać [PT] bo nie widzę różnicy w przekazywanych danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1