публичный каталог для .htaccess - PullRequest
8 голосов
/ 13 января 2009

У меня есть функция диспетчера в index.php, поэтому URL-адреса, такие как:

/ блог / шоу перейти на

/ index.php / блог / показать

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Как я могу изменить это так, чтобы я мог выгрузить все свои статические файлы в публичный каталог, но получить к ним доступ без публичного доступа в URL.

Например, /docs/lolcats.pdf доступ

/ public / docs / lolcats.pdf на диске

Я пробовал это

RewriteCond %{REQUEST_FILENAME} !f
RewriteRule ^(.*)$ public/$1 [QSA,L]

1 Ответ

14 голосов
/ 28 января 2009

Попробуйте это:

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

Если вы хотите использовать его в подкаталоге ниже корня:

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

Я нашел другое решение без явного указания имени подкаталога:

RewriteRule ^public/ - [L]
RewriteCond public/$0 -F
RewriteRule .* public/$0 [L]

Важным изменением было использование -F вместо -f, поскольку первое вызывает подзапрос.

...