我已经使用非常基本的配置在 Apache 2.4.7 上设置了我的虚拟主机:
<VirtualHost *:80>
ServerName foo.example.com
DocumentRoot /var/www/html
DirectoryIndex index.php
FallbackResource /index.php
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在文档根目录下,我具有以下结构:
/index.php
/help/readme.txt
Run Code Online (Sandbox Code Playgroud)
当我提出请求时,我得到以下结果:
/bla -> 200 OK
/help/ -> 404 Not Found
/help/a -> 200 OK
Run Code Online (Sandbox Code Playgroud)
似乎/help/
目录的存在导致 Apache 返回,404
因为那里没有index.php
,但我希望所有请求都能调用/index.php
并产生200 OK
响应。
我不记得这是使用时的问题mod_rewrite
,但FallbackResource
如果可能的话,我更喜欢使用。有没有办法来解决这个问题?
更新
如果我删除DirectoryIndex
指令,它会起作用,但是会遇到五秒延迟问题。
更新 3
我正在运行以下测试环境;目录结构如下:
./htdocs
index.html
test/
bla.txt
./conf
httpd.conf
./logs
Run Code Online (Sandbox Code Playgroud)
内容httpd.conf
为:
ServerName apache-bug.local
Listen 8085
DirectoryIndex disabled
DirectorySlash Off
<VirtualHost *:8085> …
Run Code Online (Sandbox Code Playgroud) 我正在使用 PHP 5.4.21 运行 Apache 2.4.6 (Amazon) 的标准安装,对我的虚拟主机使用以下配置:
DirectoryIndex index.php
# ...
FallbackResource /index.php
Run Code Online (Sandbox Code Playgroud)
我index.php
是简单的缩影:
<?php echo "Hello world";
Run Code Online (Sandbox Code Playgroud)
访问http://<server-name>/
神秘地仅在五秒钟后显示完整页面!任何其他页面都有预期的响应时间(很快)。
我发现这五秒与该Keep-Alive
功能的默认等待时间有关;在这种情况下,直到 Apache 在该等待时间之后切断连接后,才会发送分块响应的最后几个字节。顺便说一句,这也完全破坏了持久连接本来可以为您带来的任何收益。
这是Apache的一个已知错误还是我在这里遗漏了一些非常明显的东西?