2014-09-21 2 views
6

Я хочу использовать файл .htaccess, чтобы проверить, является ли запрошенный путь файлом в каталоге public/. Если да, подайте его, а затем отправьте запрос на адрес /index.php. Кажется, я не могу заставить это работать..htaccess: подавать статические файлы, перенаправить все остальное на index.php

Вот что я получил:

Options +FollowSymLinks 
RewriteEngine on 

Options -Indexes 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^%{DOCUMENT_ROOT}/public%{REQUEST_URI} [L] 

RewriteRule^index.php [QSA,L] 

например http://example.com/css/style.css должен иметь apache подавать /public/css/style.css, потому что это файл, который существует, но http://example.com/css/style.bad следует отправить в /index.php.

ответ

1

По-видимому [L] does not work as I expected. Имея это в виду, и много проб и ошибок, мне удалось найти то, что работает:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f 
RewriteRule^public%{REQUEST_URI} [L] 

RewriteCond %{REQUEST_URI} !^/public/ 
RewriteRule^index.php [QSA,L] 
6

Этот код должен работать, как ожидается, на вашей стороне

Options +FollowSymLinks -MultiViews -Indexes 

RewriteEngine On 
RewriteBase/

RewriteCond %{DOCUMENT_ROOT}/public/$1 -f 
RewriteRule ^(.*)$ public/$1 [L] 

RewriteCond %{THE_REQUEST} \s/public/ [NC,OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php [L,QSA] 
+0

Это работает! Спасибо. Я только заметил, что 'style.css' доступен в * both *'/css/style.css' * и * '/ public/css/style.css'. Технически последний должен перейти на 'index.php', так как'/public/public/css.style.css' не является файлом. Это также означает, что '/ public/xxx' будет генерировать apache 404 вместо пользовательского, который я настроил в моем файле' index.php'. Невозможно это исправить, не так ли? – mpen

+1

Я отредактировал свой ответ, чтобы принять во внимание ваш комментарий –

+1

Твоя магия моя дорогая. Вы спасли меня. большое спасибо –