Файл htaccess запрещен для всех, перенаправляет на 404, не найден на 403.shtml, но не определены пользовательские страницы ошибок

Я настраиваю быстрый внутренний проект в новом домене аддона в cPanel. Этот конкретный имеет установленный сертификат SSL. Я строил свой.htaccess и добавил <Files config.php> директива к deny from all так что мой файл config.php не доступен. Я понимаю, что хранить его вне веб-корня - идеальный вариант, но я не могу в этом случае.

Обычно я ожидаю, что при переходе www.domain.com/config.php в браузере, который я бы получил по умолчанию Apache 403 Forbidden. Это то, что происходит в других доменах на том же сервере. Но в этом случае мне выдают ошибку 404 not found, утверждая:

не обнаружена
Запрашиваемый URL /403.shtml не найден на этом сервере.
Кроме того, при попытке использовать ErrorDocument для обработки запроса произошла ошибка 404 Not Found.

Я обычно ожидал бы этого, если бы я пытался определить пользовательские документы об ошибках, но в этом случае я не!
Единственное, что отличает этот домен от всех остальных в той же учетной записи cPanel, это тот факт, что он имеет сертификат SSL. И эта ошибка 404 одинакова независимо от навигации по http или https. Я пробовал очистить кеш и все тот же.

Кто-нибудь может увидеть что-нибудь в моем.htaccess ниже, что может быть причиной этого?

DirectoryIndex /index.php

Options -Indexes +FollowSymLinks
ServerSignature Off

# PARSE PHP IN OTHER FILES
# AddType FOR PHP AS APACHE MODULE, AddHandler FOR CGI
AddType application/x-httpd-php .ics .xml

# ATTEMPT FORCE PDF DOWNLOAD
AddType application/octet-stream .pdf

# PREVENT ACCESS TO CONFIG
<Files config.php>
order allow,deny
deny from all
</Files>

# CACHING
# http://httpd.apache.org/docs/current/mod/mod_headers.html
<FilesMatch "\.(js|css|ico|png|gif|jpg)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
#Header set Expires "Thu, 15 Apr 2011 20:00:00 GMT"
</FilesMatch>

# PREVENT ACCESS TO STATS UPDATE SCRIPT AS IT'S CLI ONLY
<Files stats_update.php>
order allow,deny
deny from all
</Files>

Redirect 302 /preview http://otherdomain.com/documents/preview
Redirect 302 /sample http://otherdomain.com/documents/preview

RewriteEngine On

# REWRITE NON-WWW TO WWW
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301]

RewriteRule ^about/?$ /index.php [L]
RewriteRule ^contact/?$ /contact.php [L]
RewriteRule ^home/?$ /home.php [L]
RewriteRule ^order/?$ /order.php [L]

# MAINTAINANCE
#RewriteCond %{REMOTE_HOST} !^123\.123\.123\.123
#RewriteCond %{REQUEST_URI} !^/maintainance\.html$
#RewriteRule ^(.*)$ /maintainance.html [R=302,L]

РЕДАКТИРОВАТЬ: это может быть связано с тем, как cPanel обрабатывает первичные и дополнительные домены?
В учетной записи cPanel у вас есть основной домен, файлы которого находятся под public_html Затем вы определяете домены аддона (или субдомены), чьи файлы находятся под public_html/addondomain.com/

Будет ли.htaccess для основного домена в public_html/.htaccess влиять на / переопределять домен аддонов в public_html/addondomain.com/.htaccess?
Я знаю, что.htaccess каскадно перемещается по каталогам, но так ли это даже выше DocumentRoot конкретного домена, например: в случае этого домена дополнения?

РЕДАКТИРОВАТЬ 2: просто для информации здесь ответы на оба HTTP-запроса, минуя любое кэширование

root@vps [/home/username]#curl -i 'http://www.mydomain.com/config.php'
HTTP/1.1 403 Forbidden
Date: Sun, 16 Sep 2012 19:05:10 GMT
Server: Apache
Content-Length: 331
Content-Type: text/html; charset=iso-8859-1


root@vps [/home/username]# curl -i 'http://mydomain.com/config.php'
HTTP/1.1 301 Moved Permanently
Date: Sun, 16 Sep 2012 19:05:20 GMT
Server: Apache
Location: http://www.mydomain.com/403.shtml
Content-Length: 244
Content-Type: text/html; charset=iso-8859-1

Вы видите, что 2-й получает перенаправление 301, но он перенаправляет на 403.shtml. Таким образом, 403.shtml уже был введен перед перезаписью на www. случается.

2 ответа

Решение

Это невозможно было воспроизвести на ванильной установке Apache, поэтому я начал допрашивать cPanel. Так что после большого количества дурачения вокруг я разыскал проблему. cPanel действительно устанавливает директиву ErrorDocument для вас, и она не очень умна. Особенно, когда он устанавливает ErrorDocuments для документов, которые явно идентичны значениям по умолчанию Apache.
Непонятно, где это происходит, поскольку экран ErrorDocument cPanel пуст.

httpd.conf cPanel построен из довольно многих включенных конфигов и спрятан там...

/usr/local/apache/conf/includes/errordocument.conf
...
# 403 - Forbidden
ErrorDocument 403 /403.shtml

Итак, поехали, вот где 403.shtml появляется в запросе. cPanel устанавливает для меня документы об ошибках. Чтобы избежать путаницы при просмотре 404 на 403, я установил собственное сообщение об ошибке 403, чтобы, по крайней мере, они были согласованы.

Я надеюсь, что это поможет кому-то!

Ваш файл htaccess не вызывает пользовательскую страницу ошибки. Если нет других файлов htaccess, проблема, вероятно, связана с cPanel, который имеет собственный способ установки пользовательских страниц ошибок.

Другие вопросы по тегам