Witam, ostatnio zastanawiam się nad jedną kwestią budowy składni mod_rewrite’a. Zazwyczaj jeżeli wpiszemy adres http://page.pl/style.css adres odwoła się do katalogu /public_html/style.css . Napisze wstęp do mojego problemu. Zakładamy, że ktoś zażyczył sobie takiego przepisywania, kiedy plik istanieje, wówczas jest przepisywany, a jeżeli nie, to deklarujemy jakiś inny plik (dla przykładu index.php). Zasada jest taka:
http://page.pl/style.css
to: /public_html/style.css
http://page.pl/nieistniejący_style.css
to: /public_html/index.php
Kod .htaccess wyglądałby mniej więcej tak:
Kod
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ $1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+)$ $1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php
Możnaby jeszcze zamiast wykrycia niewłaściwego pliku wywołać index.php jako ErrorDocument 404, ale trzymajmy się powyższego schematu.
Ok., powyższy przykład szuka pliku w katalogu /public_html/. Załóżmy, że mam taką strukturę: w katalogu głównym /public_html/ jest plik index.php oraz folder /www/. Wszystkie adresy przyjmowałyby następujący schemat:
http://page.pl/style.css
to: /public_html/www/style.css
http://page.pl/nieistniejący_style.css
to: /public_html/index.php
Moje pytanie brzmi: jak zmodyfikować RewriteCond %{REQUEST_FILENAME} –f tak, aby sprawdzał, czy plik istnieje w folderze /www/ a nie w folderze głównym?
P.S: robiłem, że rewritebase jest na /www/, a index był: ../index.php ale nie działało... ciągle wyskakiwał index.