У меня есть функция диспетчера в index.php, поэтому URL-адреса вроде:
/ blog / show перейти в
/index.php/blog/show
<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]





Попробуй это:
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, поскольку первый запускает подзапрос.
Я думаю, что это возможно только в том случае, если вы явно укажете подкаталог.
Второй раздел в этом ответе сделал именно то, что мне нужно, - отображал файлы в «общедоступном» каталоге без необходимости указывать «общедоступный» в URL-адресе.
@Gumbo Мне нужен ответ, похожий на этот. Пожалуйста, прочтите мою, дайте мне любые решения - stackoverflow.com/questions/57992993/…
Спасибо, это сработало отлично! Я безуспешно пытаюсь изменить это так, чтобы он работал вложенным в другой каталог. Например, если файл foo.txt помещен в DOCROOT / mysubdir / public / foo.txt, какое правило позволяет мне получить к нему доступ через www.example.com/mysubdir/foo.txt?