HTTP-запрос возвращает 404 … должен возвращать 403

Вопрос или проблема

Мой .htaccess выглядит так:

# масса запретов с IP-адресов

<ifModule mod_rewrite.c>

  RewriteEngine on
  RewriteBase /
  
  # Блокировать большинство запросов к mydomain.com
  RewriteCond %{REQUEST_URI} !^/403\.shtml$
  RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC,OR]
  RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]
  RewriteRule .* - [R=403,L]

# другие настройки

Это область моего аккаунта на общих хостингах, которая не должна быть доступна через www.

Иными словами, я хочу, чтобы любой запрос (кроме /403.shtml) получал 403.

Тем не менее, я нахожу этот единственный 404 в своем журнале доступа Apache…

журнал доступа apache

Вероятно, я упускаю что-то очевидное. Я время от времени вижу несколько других 404 (не в этом конкретном файле журнала), но в основном получаю ожидаемые 403.

Это не большая проблема. Но если я делаю что-то неправильно, я хотел бы это выяснить.

Есть ли какие-нибудь предложения?

Ответ или решение

Судя по вашему коду конфигурации .htaccess, вы настроили правила, которые возвращают код ответа 403 для всех запросов, кроме доступа к /403.shtml. Однако вы всё еще получаете некоторые ошибки 404. Это может происходить по нескольким причинам.

  1. Правила в .htaccess: Ваши условия находятся в блоке <IfModule mod_rewrite.c>, что означает, что они будут выполнены только в случае, если модуль mod_rewrite загружен. Убедитесь, что он активен на вашем сервере. Это можно сделать, добавив временный код, который обращается к этому модулю, и проверив результат.

  2. Путь к файлу /403.shtml: Если файл /403.shtml отсутствует на сервере, Apache будет возвращать ошибку 404 при попытке доступа к этому ресурсу. Убедитесь, что файл находится в корневом каталоге вашего хостинга и доступен для чтения сервера Apache. Проверьте настройки прав доступа к файлу.

  3. Логи сервера: Проверьте логи сервера на наличие дорожек к файлам, которые не были обработаны вашим правилом и возвращают 404. Возможно, вы пропустили какое-то условие, из-за чего запрос идет на несуществующий файл или ресурс.

  4. Дополнительные правила: Если в вашем файле .htaccess есть другие правила (вы упоминаете "ещё много другого"), они могут также оказывать влияние на обработку запросов. Убедитесь, что они не конфликтуют с вашими правилами, возвращающими 403. Если есть другие правила, могущие обрабатывать запросы до ваших, возможно, стоит их переместить ниже.

  5. Кэширование: Убедитесь, что изменения в .htaccess вступили в силу. Иногда кэш браузера или настройки кэширования на сервере могут мешать применению изменений сразу. Попробуйте очистить кэш и проверьте снова.

  6. Правила для других методов HTTP: Убедитесь, что ваш сервер правильно настроен для обработки всех типов запросов (POST, PUT и т.д.) и не фильтрует их на уровне сервера.

Вот общая структура вашего .htaccess с небольшими комментариями для понимания:

# Блокировка доступа с определенных IP-адресов
# ...

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # Исключение только для /403.shtml
  RewriteCond %{REQUEST_URI} !^/403\.shtml$
  RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC,OR]
  RewriteCond %{HTTP_HOST} ^www\.mydomain\.com$ [NC]

  # Все остальные запросы возвращают 403
  RewriteRule .* - [R=403,L]

  # Дополнительные правила могут быть добавлены ниже
  # ...
</IfModule>

Если вы проверите все перечисленные моменты и устраните возможные конфликты, проблема должна решиться, и вы больше не будете получать ошибку 404 для запросов, которые должны возвращать 403.

Оцените материал
Добавить комментарий

Капча загружается...