Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [.htaccess] Niedeterministyczne zachowanie
Forum PHP.pl > Forum > Serwery WWW
Kabraxis
Głowię się nad tym już drugi dzień, może ktoś zauważy coś czego ja nie widzę.

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} ^(.+)$
RewriteRule ^(.*)$ http://www.%1/$1 [R=permanent,L,QSA]

#^to dodaje www. jezeli go nie ma - dziala poprawnie

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.(.+).domena.pl$
RewriteRule ^([\/0-9A-Za-z_-]*)/$ index.php?find=%1&category=$1 [L,QSA]
RewriteRule ^([\/0-9A-Za-z_-]*)\.html$ index.php?find=%1&page=$1 [L,QSA]

#^to juz nie do konca
Według tego jak rozumiem najpierw sprawdza czy nie istnieje taki plik ani katalog i czy HTTP_HOST pasuje do wzorca. Jezeli wszystko jest true to sprawdza RewriteRule. Do tego momentu dziala dobrze. Jezeli podam adres www.domena.pl/a/b/ nie zadziala,a jezeli podam www.page1.doemna.pl/a/b/ zadziala poprawnie.

Ale jeżeli dodam do tego np. linijkę:
RewriteRule ^(.*)$ index.php?find=%1&bla=a$1 [L,QSA]
dzieje się coś dziwnego. Nawet adresy typu domena.pl/obrazek.jpg przestają się ładować poprawnie - zamiast nich ładuje się domena.pl/index.php i co lepsze wszystko to ładuje się bez zmiennej "bla", która została ustawiona w RweriteRule. Pomijam już to, że adres www.domena.pl powinien być pomijany bo nie pasuje do wzorca. Dlaczego ta linijka całkowicie wywraca wszystko do góry nogami?

Co chcę osiągnąć:
www.page1.domena.pl -> index.php?find=page1 // nie dziala
www.page1.domena.pl/a/b/ -> index.php?find=page1&q=a/b
www.page1.domena.pl/abc.html -> index.php?find=page1&page=abc
www.domena.pl -> index.php
www.domena.pl/abc.html -> index.php?page=abc

Z góry dziękuję za pomoc.

Doszedłem do czegoś nowego czyli dlaczego to nie działa tak jak powinno:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.(.+).domena.pl$
RewriteRule ^([\/0-9A-Za-z_-]*)/$ index.php?find=%1&category=$1 [L,QSA]
RewriteRule ^([\/0-9A-Za-z_-]*)\.html$ index.php?find=%1&page=$1 [L,QSA]
<- to dziala zarowno dla www.domena.pl/kontakt.html i www.page1.domena.pl/kontakt.html

Ale jak rozbiję to tak:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.(.+).domena.pl$
RewriteRule ^([\/0-9A-Za-z_-]*)/$ index.php?find=%1&category=$1 [L,QSA]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^www.(.+).domena.pl$
RewriteRule ^([\/0-9A-Za-z_-]*)\.html$ index.php?find=%1&page=$1 [L,QSA]


Działa prawidłowo... nie ma sposobu aby nie powtarzać RewriteCond za każdym razem?
ShadowD
Z tego co rozumiem chcesz osiągnąć albo to albo to więc flaga [OR] pomoże... ;]
Kabraxis
Cytat(ShadowD @ 12.05.2009, 15:00:23 ) *
Z tego co rozumiem chcesz osiągnąć albo to albo to więc flaga [OR] pomoże... ;]


[OR] jest do RewriteCond i to mi nic nie zmienia.

Apache interpretuje regułki w następujący sposób:

if(RewriteCond && RewriteCond ...){
RewriteRule}
RewriteRule

A ja chce:
if(RewriteCond && RewriteCond ...){
RewriteRule
RewriteRule}

Z tego co wyczytałem chyba nie ma na to sposobu. Jest tylko [C] ale to do mojego przypadku nie pasuje.
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.