7

我正在尝试清理我的 apache 虚拟主机,因为我有许多“别名”,并且将它们全部放入 mod_rewrite 可能很烦人。但是,虽然我可以自己访问特定的 URL(例如http://example.dev/robots.txthttp://example.dev/,但虚拟主机不会回退到列出的 URL ( FallbackResource /index.php)。

vhost 是 Zend Framework 项目的容器,没有设置 .htaccess 文件。

访问日志显示.... "GET / HTTP/1.1" 302 0,但 Google Chrome 显示“未收到数据”和“错误 324 (net::ERR_EMPTY_RESPONSE):服务器关闭连接但未发送任何数据。”

注释掉该FallbackResource行并重新启用<Location />基于 - 的 mod_rewrite 可以按预期工作。

编辑:虚拟主机中没有任何东西可以阻止它工作。几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>
4

1 回答 1

4

我有一个解决方案。正如我在对原始问题的评论中所说,我也遇到了同样的问题。我的虚拟主机非常简单:

<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失败了,所以我认为通过确保 index.html 通过指定提供服务DirectoryIndex,就不需要后备了。您可以称其为解决方法。

于 2013-09-12T11:46:31.990 回答