我正在尝试清理我的apache vhosts,因为我已经有了很多'别名',并且将它们全部放入mod_rewrite可能很烦人。但是,虽然我可以自行访问特定网址(例如http://example.dev/robots.txt,http://example.dev/,但vhost不会回退到列出的网址(FallbackResource /index.php
)。
vhost是Zend Framework项目的容器,没有设置.htaccess文件。
访问日志显示.... "GET / HTTP/1.1" 302 0
,但Google Chrome显示“未收到数据”和“错误324(net :: ERR_EMPTY_RESPONSE):服务器关闭连接而不发送任何数据。”
评论FallbackResource
行,并重新启用基于<Location />
的mod_rewrite可以正常工作。
编辑:我可以看到vhost中没有任何内容可以阻止它工作。一些Alias
行(FallbackResource应该使用)和一些FilesMatch
来停止访问具有特定扩展名的文件。日志中出现的唯一内容是404尝试转到URL而不是index.php(列出的资源)。
<VirtualHost *:80>
ServerAdmin webmaster@site.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/website/current/html/
SetEnv APPLICATION_ENV productionbackend
# must be most specific first
Alias /i/static /var/website/static/i
# more /i/* Alias
Alias /i /var/website/current/resources/common-furniture/
# protecting files in the directory.
<FilesMatch ".*\.xml">
Order allow,deny
Deny from all
</FilesMatch>
<Directory "/var/website/current/html/">
Options FollowSymLinks All
AllowOverride All
</Directory>
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>
答案 0 :(得分:4)
我有一个解决方案。正如我在对原始问题的评论中所说,我也遇到了同样的问题。我的vhost非常简单:
<VirtualHost *:8029>
DocumentRoot "C:\path\to\wwwroot"
ServerName localhost
<Directory />
AllowOverride All
</Directory>
</VirtualHost>
我的htaccess只包含:
FallbackResource index.html
我已将DirectoryIndex
添加到我的.htaccess文件中。它现在写着:
FallbackResource /index.html
DirectoryIndex index.html
这解决了这个问题。
为什么这样做?
仅在第二次调用/
url并且浏览器缓存它时才会出现空响应。出于某种原因,似乎FallbackResource
在这种情况下失败了,所以我认为通过确保通过指定DirectoryIndex
来提供index.html,就不需要回退了。你可以称之为解决方法。