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

Запретить доступ к корневому каталогу, разрешив доступ к DirectoryIndex для страницы по умолчанию

Я пытаюсь запретить доступ к корневому каталогу, одновременно разрешая доступ к определенным файлам (заканчивающимся на .html и .js) и указывая DirectoryIndex, чтобы запросы каталога отвечали страницей по умолчанию.

Проверил уже эти вещи:

-Apache / 2.2.14 может читать корень своего каталога.

-Файл DocumentRoot существует.

-Нет других настроек каталога, которые настраивают тот же каталог

Вот одна из наиболее явных конфигураций, которые я пробовал.

<VirtualHost *:80>
ServerName myserver.com
DocumentRoot /var/www/client

DirectoryIndex app.html

<Directory /var/www/client>
  AllowOverride None
  Options +Indexes
  Order Allow,Deny
  Deny from all

  <Files ~ "\.(js|html)$">
    Order Deny,Allow
    Allow from all
  </Files>

</Directory>
</VirtualHost>

Выдает 403. Я попробовал несколько вариантов, пытаясь указать директивы настолько ясно, насколько я знал, как это сделать. Я попытался allow from all в каталоге, чтобы доказать, что нет конфликтующих правил и DirectoryIndex работает должным образом (обслуживается app.html). С приведенной выше конфигурацией я могу получить /app.html, но он не будет использоваться по умолчанию для запросов к «/».

Именно это я и сделал, чтобы добиться желаемого эффекта.

<VirtualHost 127.0.0.0:80>
ServerName example.com
DocumentRoot /var/www/client

AliasMatch ^/$ /var/www/client/app.html

<Directory /var/www/client>
  AllowOverride None
  Order Allow,Deny
  Deny from all

  <Files ~ "\.(js|html)$">
    Order Deny,Allow
    Allow from all
  </Files>

</Directory>
<VirtualHost>

Есть ли лучший способ достичь моей цели? DirectoryIndex не работает с?

Использование AliasMatch - хороший способ добиться желаемого.

Причина, по которой DirectoryIndex не дает вам того, что вы хотите, заключается в том, что Files Директива смотрит на запрос, сделанный браузером, и этот запрос не содержит .html или .js. В AliasMatch директива гарантирует, что запрос будет перезаписан до достижения Files директива, но DirectoryIndex не происходит в надлежащем контексте, чтобы он был пойман Files директива.