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, в которой говорится:

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]

EDIT: Может ли это быть связано с тем, как 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

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


person batfastad    schedule 30.08.2012    source источник


Ответы (2)


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

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

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

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

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

person batfastad    schedule 17.09.2012

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

person Jon Lin    schedule 30.08.2012
comment
Я просмотрел этот раздел в cPanel, и не похоже, что что-то явно установлено для проблемного домена. Хотя я отредактировал свой вопрос с некоторыми дополнительными мыслями. Ваше здоровье - person batfastad; 31.08.2012