Вопрос или проблема
Мой .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…
Вероятно, я упускаю что-то очевидное. Я время от времени вижу несколько других 404 (не в этом конкретном файле журнала), но в основном получаю ожидаемые 403.
Это не большая проблема. Но если я делаю что-то неправильно, я хотел бы это выяснить.
Есть ли какие-нибудь предложения?
Ответ или решение
Судя по вашему коду конфигурации .htaccess, вы настроили правила, которые возвращают код ответа 403 для всех запросов, кроме доступа к /403.shtml. Однако вы всё еще получаете некоторые ошибки 404. Это может происходить по нескольким причинам.
-
Правила в .htaccess: Ваши условия находятся в блоке
<IfModule mod_rewrite.c>
, что означает, что они будут выполнены только в случае, если модуль mod_rewrite загружен. Убедитесь, что он активен на вашем сервере. Это можно сделать, добавив временный код, который обращается к этому модулю, и проверив результат. -
Путь к файлу /403.shtml: Если файл /403.shtml отсутствует на сервере, Apache будет возвращать ошибку 404 при попытке доступа к этому ресурсу. Убедитесь, что файл находится в корневом каталоге вашего хостинга и доступен для чтения сервера Apache. Проверьте настройки прав доступа к файлу.
-
Логи сервера: Проверьте логи сервера на наличие дорожек к файлам, которые не были обработаны вашим правилом и возвращают 404. Возможно, вы пропустили какое-то условие, из-за чего запрос идет на несуществующий файл или ресурс.
-
Дополнительные правила: Если в вашем файле .htaccess есть другие правила (вы упоминаете "ещё много другого"), они могут также оказывать влияние на обработку запросов. Убедитесь, что они не конфликтуют с вашими правилами, возвращающими 403. Если есть другие правила, могущие обрабатывать запросы до ваших, возможно, стоит их переместить ниже.
-
Кэширование: Убедитесь, что изменения в .htaccess вступили в силу. Иногда кэш браузера или настройки кэширования на сервере могут мешать применению изменений сразу. Попробуйте очистить кэш и проверьте снова.
-
Правила для других методов 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.