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

Как с помощью nginx и Drupal обработать ошибку 404 для существующих статических файлов и каталогов?

Я развертываю веб-сайт Drupal с помощью git (ну ладно, разработчики развертывают его; я стараюсь уберечь их от проблем), и по этой причине на сайте есть каталог .git и файл .gitignore в корне документа.

В настоящее время разрешений для файлов достаточно, чтобы nginx возвращал ошибку 403 Forbidden, если доступ к этим файлам осуществляется в веб-браузере.

Однако я бы хотел, чтобы nginx полностью отрицал существование этого файла и каталога и возвращал 404, если кто-то пытается получить к ним доступ в браузере.

Но подождите, это еще не все!

Что я действительно хотите, чтобы браузер получил страницу с ошибкой 404, созданную Drupal. В Drupal admin/settings/error-reporting страницу, я вижу, что 404 ошибки отправляются на http://www.example.com/404error, узел Drupal с одной из наиболее интересных страниц 404 в Интернете.

Моя конфигурация nginx уже содержит @drupal блок, который передает запрос в Drupal. Итак, я хочу передать запрос в Drupal, но я не хочу, чтобы Drupal также пытался обслуживать существующий статический файл, а просто обслуживал страницу 404.

location @drupal {
    rewrite ^/(.+)$        /index.php?q=$1 last;
}

К сожалению, Google здесь не слишком помог; у большинства людей, кажется, противоположная проблема. Как мне вызвать запросы на что-либо в .git справочник или .gitignore файл для отправки на страницу 404 Drupal?

Попробуйте создать блок местоположения для .git каталог и установите его как внутренний. Это должно вызвать 404 ответа на любые запросы. Если они не передаются в Drupal, вам может потребоваться определить error_page сделать так.

location /.git {
    internal;
}
error_page 404 /notfound;

Другой вариант - просто переписать эти запросы на что-то несуществующее:

rewrite ^/.git /notfound;