我们在 CentOS 5.5 Linux 上的 Apache/2.2.19 上为 .html 文件配置了一个带有 SSI 的网站。运行正常,但根页面(index.html 用作目录索引)偶尔会出现 403 错误。在页面运行、不运行和再次运行之间,文件系统没有发生变化。
当它不起作用时,就好像 Apache 认为 index.html 文件不存在,因此尝试提供目录列表,但我们的配置故意拒绝了这一点。
Apache 虚拟主机特定的错误日志包含如下条目:
[Tue Aug 09 03:10:47 2011] [error] [client 66.249.72.3] Directory index forbidden by Options directive: /main/directory/
Apache 常规错误日志不包含任何内容。
Apache 虚拟主机特定的访问日志包含如下条目:
66.249.72.3 - - [09/Aug/2011:03:10:47 +0100] "GET / HTTP/1.1" 403 230 "-" "SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)"
总体分布:
# fgrep 'GET / ' `ls -tr domain-access_log*` | cut -d ' ' -f 9 | sort | uniq -c
1339 200
1 206
31 304
29 403
Apache 配置如下所示:
<VirtualHost ip.address:80>
ServerName domain.here
DocumentRoot /main/directory
ErrorLog logs/domain-error_log
CustomLog logs/domain-access_log combined
DirectoryIndex index.html
AliasMatch ^/(robots\.txt|sitemap.*\.xml(?:\.gz)?)$ /other/directory/$1
CacheEnable disk /
CacheDisable /sitemap.xml.gz
CacheDisable /robots.txt
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript
<Directory /main/directory>
Options Includes
AddOutputFilter INCLUDES .html
Order allow,deny
Allow from all
</Directory>
<Directory /other/directory>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
答案1
由于这是一个虚拟站点,我们还必须考虑 httpd.conf 级别的设置... 您是否在任何地方设置了选项多视图? SSI 加上语言协商可能会导致它尝试提供不存在的 index.html 的替代版本。然后同样的事情可能会导致它无法找到所需的 ErrorDocument 并给您带来更奇怪的结果。
是否正在进行低级别的重写?
老的 您包含的日志行是手机浏览器。您是否有其他处理移动网络浏览器的 Apache 处理程序?您是否在执行任何与 HTTP_USER_AGENT 匹配的重写并将请求发送到其他地方?
答案2
看起来您可能只需要在目录声明中添加“索引”选项,特别是 /main/directory。