У меня есть следующая структура каталогов:
root
folder1
foldera
file.php
folder2
folderb
index.php
.htaccess
Я хотел бы перенаправить все запросы в index.php и применить это ко всем папкам. Вот мой.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Это, похоже, отлично работает для localhost/root
. Запрос корректно перенаправляется на index.php. Но для localhost/root/folder1
или localhost/root/folder1/foldera/filephp
он не работает. Есть ли дополнительное правило, которое мне нужно определить для этого?
От: https://httpd.apache.org/docs/current/howto/htaccess.html
Директивы конфигурации, найденные в файле.htaccess, применяются к каталогу, в котором находится файл.htaccess, и ко всем его подкаталогам. Тем не менее, важно также помнить, что в каталогах, возможно, были файлы.htaccess. Директивы применяются в том порядке, в котором они найдены. Поэтому файл.htaccess в определенном каталоге может переопределять директивы, найденные в файлах.htaccess, найденных выше в дереве каталогов. И те, в свою очередь, могут иметь переопределенные директивы, найденные еще выше, или в самом файле конфигурации сервера.
Если ваш htaccess находится в корне, почему "../"? Как бы то ни было, он перенаправляется на index.php выше вашего корневого каталога.
Если вы хотите, чтобы он работал для всех запросов, удалите два условия перезаписи. Сейчас он говорит: "переписать запрос, только если запрос не для файла или каталога, который существует".
Если вы не хотите, чтобы файлы в других папках были доступны напрямую, возможно, имеет смысл полностью перемещать их за пределы веб-корня. Таким образом, ваш фронт-контроллер будет находиться в подкаталоге web/
, а docroot веб-сервера укажет на это.
root
folder1
foldera
file.php
folder2
folderb
web <- DocumentRoot should point here
.htaccess
index.php