Apache2上的FallbackResource(2.2.22(Ubuntu))

时间:2012-07-18 15:07:46

标签: apache2 apache2-module

我正在尝试清理我的apache vhosts,因为我已经有了很多'别名',并且将它们全部放入mod_rewrite可能很烦人。但是,虽然我可以自行访问特定网址(例如http://example.dev/robots.txthttp://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>

1 个答案:

答案 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,就不需要回退了。你可以称之为解决方法。