2013-04-08 5 views
-1

У меня есть следующий файловое дерево:Htaccess mod_rewrite в подкаталоге

root 
    -lib 
    -config 
    -public 
     -img 
     -css 
     -js 
     index.php 
    .htaccess 

.htaccess в корневой папке. Большинство запросов следует переписать на public/index.php? Request = $ 1, но это не проблема.

Я хочу еще RewriteRule для изображений, CSS и JavaScript (или в общем, любой другой файл или каталог в/общественности):

Вместо

example.com/public/css/style.css Я хочу, чтобы файл был доступен под example.com/css/style.css

И вместо

example.com/public/newfolder/randomfile.txt Я хочу, чтобы этот файл будет доступный под example.com/newfolder/randomfile.txt

Так что я должен держать этот реферат.

Я не могу заставить его работать должным образом, особенно не сочетать оба случая в одном файле .htaccess.

Это основная RewriteRule для файлов/папок, которые не существует:

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

Любая помощь будет оценена.

ответ

1

Вы можете проверить с RewriteCond, если есть реальный файл, соответствующий вашему запросу, а затем прекратить переписывание

RewriteEngine on 

# real files 
RewriteCond %{DOCUMENT_ROOT}/public/$0 -f 
RewriteRule ^.+$ public/$0 [L] 

# everything else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ public/index.php?request=$1 [QSA,L] 

Edit:

Если вложенная папка корня используется в качестве корня проекта:


RewriteEngine on 

RewriteBase /subdir/ 

# real files 
RewriteCond %{DOCUMENT_ROOT}/subdir/public/$0 -f 
RewriteRule ^.+$ public/$0 [L] 

# everything else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ public/index.php?request=$1 [QSA,L] 
+0

Я пробовал это. Второе правило по-прежнему применяется, даже если существует реальный файл. – Daniel

+1

@ Daniel У меня были две ошибки в правилах. 1. правило: замените реальный файл. 2. rule: не переписывайте реальные файлы. –

+0

Спасибо, что работает сейчас. В первом правиле мне пришлось удалить ведущую косую черту. – Daniel

Смежные вопросы