Как запретить прямой доступ к ErrorDocument в Apache httpd

Предположим, у меня есть простая структура каталогов, подобная следующей:

/var/www/html
  - index.html
  - 404.html

И простая конфигурация, подобная этой:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName example.com
    ErrorDocument 404 /404.html
</VirtualHost>

Как я могу предотвратить прямой доступ к 404.html , т.е. когда кто-то пытается получить доступ к http://example.com/404.html напрямую, вернуть код состояния 404 НЕ НАЙДЕН плюс содержимое 404.html?

Прямо сейчас, если Я обращаюсь к URL напрямую, он вернет 200 OK. Если я попытаюсь изменить код состояния через mod_rewrite :

<Location /404.html>
    RewriteEngine On
    RewriteRule .* - [R=404,L]
</Location>

, то фактический 404, например http://example.com/not-exist.html вернет следующую ошибку:

Запрошенный URL /not-exist.html не найден на этом сервере.

Кроме того, произошла ошибка 404 Not Found при попытке использовать ErrorDocument для обработки запроса.

Итак, как я могу скрыть 404.html от посетителей, но по-прежнему использовать его в качестве настраиваемой страницы с ошибкой 404?

0
задан 11 June 2019 в 06:50
1 ответ

Посмотрев на аналогичную ситуацию , я нашел решение этой проблемы - есть переменная с именем REDIRECT_STATUS [ ref ] , который будет установлен apache, когда apache найдет ErrorDocument внутри.

Таким образом, используя переменную, я могу добавить новое условие перезаписи, чтобы позволить apache исключить фактический 404 из перезаписи:

<Location /404.html>
    RewriteEngine On
    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule .* - [R=404,L]
</Location>

и это решило мою проблему.

0
ответ дан 23 November 2019 в 23:29

Теги

Похожие вопросы