Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenie regularne w HTACCESS
Forum PHP.pl > Forum > PHP
adbacz
HTACCESS powinien przekierowywać wszystkie requesty na index.php, chyba, że dany request sięga po plik, lub prowadzi do jednej z określonych ścieżek. Otóż dwa pierwsze działają poprawnie, gorzej z tymi ścieżkami.

Kod
Options FollowSymLinks
RewriteEngine On

# Prawdziwe katalogi na serwerze
RewriteRule ^Templates/?(.*)? Templates/$1 [L]
RewriteRule ^media/(.*)$ media/$1 [L]

# admin kieruje na prawdziwy katalog Administrator. Nie pytajcie dlaczego tak;/
RewriteRule ^admin$ Administrator/index.php [L]
RewriteRule ^admin/(.*)$ Administrator/index.php [L]

# Pozostała część, która prowadzi do pliku index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php


Problem jest taki, że gdy chcę na przykład odwołać się do pliku który nie istnieje, na przykład w ścieżce /Templates/Images/image.png to HTACCESS kieruje ten request na index.php.

Prosze o pomoc, bo nie daję sobie już rady z tym.
n3o
U siebie korzystam z czegoś takiego i działa, spróbój:
Kod
RewriteCond    %{REQUEST_FILENAME} !-d
RewriteCond    %{REQUEST_FILENAME} !-s

RewriteRule    ^(.*)$  index.php?request=$1 [L,NC,QSA]


-s oznacza że nie wykona przekierowania gdy plik ma rozmiar > 0
-d oznacza ze nie wykona przekierowania gdy katalog istnieje
adbacz
W moim przypadku nie odwołuję się bezpośrednio do katalogu tylko do pliku więc !-d nie zadziała. Po drugie, jesli pliku nie ma to nie może on mieć więcej niż rozmiar 0 wink.gif
erix
[APACHE] pobierz, plaintext
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_URI} !^Templates
  3. RewriteRule ^(.*) index.php
[APACHE] pobierz, plaintext
adbacz
Niestety kod erixa też nie działa. Można jakoś inaczej obejść to? Może inacej napisać wszystkie reguły?
Sephirus
Daj w katalogu w którym nie chcesz aby przenosiło na index.php coś takiego w .htaccess:

Kod
RewriteEngine Off
adbacz
Dodałem do katalogu Templates i do każdego podkatalogu do którego się odwołuje podczas chęci pokazania obrazka którego nie ma ale to nic nie daje - nadal ten sam problem.
erix
Pokaż teraz cały htaccess.
adbacz
Kod
Options FollowSymLinks
RewriteEngine On

RewriteRule ^Templates/(.*)$ Templates/$1 [L]
RewriteRule ^media/(.*)$ media/$1 [L]

RewriteRule ^admin$ Administrator/index.php [L]
RewriteRule ^admin/(.*)$ Administrator/index.php [L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^Templates
RewriteRule ^(.*) index.php
erix
Spróbuj testować inną zmienną.

A najlepiej włącz logowanie reguł i sprawdź, co przechodzi, a co nie.
adbacz
Nie jestem zbyt obeznany w mod_rewrite. Możesz mi powiedzieć jaką zmienną i gdzie włączyć te logowanie, bardzo byłbym wdzięczny?
erix
Otwiera Ci się strona http://google.pl?
adbacz
Tak, wiem. Nie znalazłem nic o logowaniu reguł, a wszystkie zmienne, które mogły by tutaj coś dać zostały już użyte wcześniej lub są używane teraz.
erix
No patrz, pod latarnią najciemniej? http://httpd.apache.org/docs/2.2/mod/mod_r...html#rewritelog
adbacz
Przy użyciu tego, na localhost oraz na zewnętrznym serwerze pokazuje się błąd 500. Sprawdzałem też RewriteLogLevel, ale tak samo pokazuje się błąd. Trzeba mieć jakieś inne rozszerzenie zainstalowane albo włączona jakąś opcję? Nie pisze nic takiego przy punkcie dotyczącym RewriteLog.
erix
Może masz nie tę wersję, co trzeba?

Kiedyś z tego korzystałem i działało bez problemów.
adbacz
Wersję czego? mod_rewrite? Gdzie tego wersję można sprawdzić?
erix
Powiedziałeś, że serwer.

Serwerów może być dziesiątki. Jakie szczegóły podajesz, takie będą odpowiedzi.

I wybacz, ale to Tobie ma zależeć na rozwiązaniu problemu, a nie nam. I ciąganie za język jest stratą czasu dla nas wszystkich. Więc rób użytek z głowy i wyszukiwarek, a dopiero potem zadawaj pytania.
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.