htaccess文件全部拒绝,重定向到403.shtml上找不到的404,但没有定义自定义错误页面

时间:2012-08-30 08:19:13

标签: apache .htaccess custom-error-pages

我正在cPanel中的新插件域中设置一个快速内部项目。这个特定的安装了SSL证书。我正在构建我的.htaccess并向<Files config.php>添加了deny from all指令,以便无法访问我的config.php文件。我意识到将它存储在Web根目录之外是理想的,但在这种情况下我不能。

通常情况下,我希望在浏览器中转到www.domain.com/config.php时,我会获得Apache默认的403 Forbidden页面。这是在同一服务器上的其他域上发生的情况。但在这种情况下,我得到了404未找到的错误,说明:

  

未找到
  在此服务器上找不到请求的URL /403.shtml   此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。

如果我试图定义自定义错误文档,我通常会期待这个,但在这种情况下,我不是! 使该域与同一cPanel帐户中的所有其他域不同的唯一因素是它具有SSL证书。无论使用http还是https导航,此404错误都是相同的。我已经尝试清除缓存,但仍然一样。

任何人都可以在我的.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/

下的插件域(或子域)

public_html/.htaccess主域名的.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。所以在重写到www之前已经注入了403.shtml。发生的情况。

2 个答案:

答案 0 :(得分:5)

这在vanilla Apache安装上无法重现,所以我开始进一步询问cPanel。因此,经过大量的捣乱,我已经找到了问题。 cPanel确实为你设置了ErrorDocument指令,它根本不是很聪明。特别是当它将ErrorDocuments设置为与Apache默认值明显相同的文档时 由于ErrorDocument cPanel屏幕为空白,因此发生这种情况并不明显。

cPanel的httpd.conf是由很多包含的配置构建的,隐藏在那里......

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

所以我们去了,这就是403.shtml出现在请求中的地方。 cPanel为我设置错误文档。为了避免在403上看到404的混乱,我设置了自己的403错误消息,所以至少它们是一致的。

我希望这可以帮助别人!

答案 1 :(得分:1)

您的htaccess文件未导致自定义错误页面。如果没有任何其他htaccess文件,问题可能在于cPanel,它有its own way of setting custom error pages