Применить .htaccess ко всем подкаталогам

1

У меня есть следующая структура каталогов:

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 он не работает. Есть ли дополнительное правило, которое мне нужно определить для этого?

  • 2
    Ваше правило применяется, только если запрошенный путь не существует.
  • 0
    У меня есть фронт-контроллер для API, через который будут проходить все запросы независимо от того, действителен ли данный путь или нет. Таким образом, запрос не может получить доступ к пути напрямую. Нет ли правила, которое я могу применить в корневом каталоге .htaccess, или мне нужно добавить .htaccess в каждую подпапку?
Теги:
.htaccess
mod-rewrite

2 ответа

1
Лучший ответ

От: https://httpd.apache.org/docs/current/howto/htaccess.html

Директивы конфигурации, найденные в файле.htaccess, применяются к каталогу, в котором находится файл.htaccess, и ко всем его подкаталогам. Тем не менее, важно также помнить, что в каталогах, возможно, были файлы.htaccess. Директивы применяются в том порядке, в котором они найдены. Поэтому файл.htaccess в определенном каталоге может переопределять директивы, найденные в файлах.htaccess, найденных выше в дереве каталогов. И те, в свою очередь, могут иметь переопределенные директивы, найденные еще выше, или в самом файле конфигурации сервера.

Если ваш htaccess находится в корне, почему "../"? Как бы то ни было, он перенаправляется на index.php выше вашего корневого каталога.

Если вы хотите, чтобы он работал для всех запросов, удалите два условия перезаписи. Сейчас он говорит: "переписать запрос, только если запрос не для файла или каталога, который существует".

  • 0
    Извините, ../ я провела тест. .Htaccess не должен включать его. Я обновил свой вопрос для точности. Это имеет смысл. Я удалю два условия перезаписи.
  • 0
    Предложение ниже от iainn является хорошим. Рекурсивный характер htaccess позволяет легко ломать вещи. Лучше всего избегать такой возможности, размещая каталоги, которые не нуждаются в прямом http-доступе, вне корневого веб-каталога.
1

Если вы не хотите, чтобы файлы в других папках были доступны напрямую, возможно, имеет смысл полностью перемещать их за пределы веб-корня. Таким образом, ваш фронт-контроллер будет находиться в подкаталоге web/, а docroot веб-сервера укажет на это.

root
    folder1
        foldera
            file.php
    folder2
        folderb
    web <- DocumentRoot should point here
        .htaccess
        index.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню