У меня есть веб 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
?