Общедоступный каталог для .htaccess

У меня есть функция диспетчера в 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]
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
9
0
7 979
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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, поскольку первый запускает подзапрос.

Спасибо, это сработало отлично! Я безуспешно пытаюсь изменить это так, чтобы он работал вложенным в другой каталог. Например, если файл foo.txt помещен в DOCROOT / mysubdir / public / foo.txt, какое правило позволяет мне получить к нему доступ через www.example.com/mysubdir/foo.txt?

Dave 23.02.2009 03:47

Я думаю, что это возможно только в том случае, если вы явно укажете подкаталог.

Gumbo 23.02.2009 15:56

Второй раздел в этом ответе сделал именно то, что мне нужно, - отображал файлы в «общедоступном» каталоге без необходимости указывать «общедоступный» в URL-адресе.

Will Shaver 07.08.2012 22:41

@Gumbo Мне нужен ответ, похожий на этот. Пожалуйста, прочтите мою, дайте мне любые решения - stackoverflow.com/questions/57992993/…

Silambarasan R.D 18.09.2019 15:50

Другие вопросы по теме