Назад | Перейти на главную страницу

разрешение доступа к индексу только с .htaccess

У меня есть это в моем файле .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>