У меня есть это в моем файле .htaccess, в корне сайта:
Options -Indexes
<directory ../.*>
Deny from all
</directory>
<Files .htaccess>
order allow,deny
deny from all
</Files>
<Files index.php>
Order allow,deny
allow from all
</Files>
Я пытаюсь заблокировать доступ к папкам и файлам ко всему, что не называется index.php, независимо от того, к какому каталогу осуществляется доступ. У меня папка работает отлично, и правило deny from all тоже работает, но моя попытка разрешить доступ к index.php терпит неудачу.
Может быть, вы думаете о чем-то сложном, просто запретите доступ, а затем разрешите доступ к index.php и самой папке. Например:
Order allow,deny
Deny from All
<FilesMatch "^(index\.php)?$">
Allow from All
</FilesMatch>
Если ты даже не хочешь http://doma.in/folder/ для работы вы можете заменить директиву FilesMatch на Files index.php
. Имейте в виду, что это зависит от вашего DirectoryIndex
директива, какой файл будет отображаться при доступе к папке без имени файла.
Редактировать: Чтобы ответить на вопрос в вашем комментарии, я думаю, вам понадобится более мощный .htaccess с использованием mod_rewrite. В соответствии с документацией Apache нельзя использовать Directory и DirectoryMatch в файле .htaccess. Поскольку запрос отклоняется до того, как RewriteRule сможет добавить завершающую косую черту, вы не можете добавить завершающую косую черту с помощью mod_write.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/index\.php$
RewriteRule ^.*$ - [F]
</IfModule>
<IfModule !mod_rewrite.c>
Order allow,deny
Deny from All
</IfModule>