Недавно я переместил свой файл index.php
(файл, который обрабатывает маршрутизацию) и ресурсы css / js / font в public/
папку. Я хочу, чтобы объекты в этой public/
папке были доступны для целей безопасности. Я столкнулся с этой проблемой, когда понял, что могу посетить mysite.com/composer.lock
и просмотреть файл блокировки композитора с помощью моей старой настройки .htaccess
и папки.
Вот что я хочу
Если я mysite.com/car/create
, я хочу, чтобы он фактически указывал на mysite.com/public/index.php?path=car/create
Если я mysite.com/css/style.css
на такой актив, как mysite.com/css/style.css
, я хочу, чтобы он действительно указывал на mysite.com/public/css/style.css
Вот моя структура папок
Вот мой .htaccess
который не работает вообще
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ public/index.php?path=$1 [L,QSA] </IfModule>
Я не знаю, как это исправить. Он просто генерирует пустые страницы, и я все же могу напрямую посещать файлы в корневом каталоге и т. Д. Любая помощь приветствуется.
Ваши существующие директивы специально избегают переписывать запросы на существующие файлы, поэтому он все равно позволит вам посещать файлы в корневом каталоге. Он также перезапишет статические ресурсы для public/index.php?path=
, которые предположительно потерпят неудачу.
Вместо этого попробуйте следующее:
RewriteEngine On # Stop processing if already in the /public directory RewriteRule ^public/ - [L] # Static resources if they exist RewriteCond %{DOCUMENT_ROOT}/public/$1 -f RewriteRule (.+) public/$1 [L] # Route all other requests RewriteRule (.*) public/index.php?path=$1 [L,QSA]