Почему Apache пытается обслуживать контент из подкаталогов, когда у меня есть универсальное правило mod_rewrite? - PullRequest
0 голосов
/ 31 января 2020

У меня есть веб root со структурой, подобной этой:

/var/www/html
├── index.php
├── .htaccess
├── private
│   ├── index.html
│   ├── private.jpg
│   ├── stuff.jpg

В файле .htaccess у меня есть следующее простое, всеобъемлющее переписывание:

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine on
    RewriteRule .* index.php [L]
</IfModule>

Теоретически это должно перехватывать каждый запрос и пересылать его на index.php, включая любые запросы в "приватный" каталог.

Например, запрос к https://example.com/private должен привести к обслуживанию index.php/private в переменной PHP $_SERVER["REQUEST_URI"]).

Однако это не так происходит. На самом деле Apache игнорирует перезаписывающую информацию и передает содержимое частного каталога.

Почему это происходит? У меня сложилось впечатление, что подобное правило перезаписи всеохватывающего типа должно охватывать каждый запрос, включая запросы на подкаталоги. На самом деле я видел код, рекомендованный для предотвращения подкаталогов, например:

# Note I am not using this code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

Важно: Я не хочу, чтобы решение о том, как сделать папка приватная, конкретно. Я знаю, как это сделать; я пытаюсь выяснить, почему мое перезаписываемое все игнорируется или переопределяется наличием подкаталога. Почему Apache обслуживает сначала подкаталог, а не отправляет его на index.php?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...