【问题标题】:Apache DirectorySlash seems not to be workingApache DirectorySlash 似乎不起作用
【发布时间】:2012-02-14 22:04:32
【问题描述】:

我正在尝试部署的网站遇到问题。该站点在我的开发主机上运行良好,但部署失败。两台主机的配置非常相似,都是 Ubuntu Linux 发行版(开发:11.10,部署:10.04),都使用 apache2 等。

两个站点都启用了 mod_dir,但部署站点似乎没有将尾部斜杠添加到目录名称,而开发站点则这样做。因此,当我输入此 URL 时(删除 http 以避免愚蠢的 stackoverflow 反垃圾邮件过滤):

devel.mydomain.com/admin

开发主机将其重定向到:

devel.mydomain.com/admin/

在部署中 http://mydomain.com/admin 未重定向到 mydomain.com/admin/ 未知原因,我以 404 错误结束。当然,如果我输入mydomain.com/admin/,手动添加斜杠,它会按预期工作。但我更喜欢将mydomain.com/admin 也重定向到mydomain.com/admin/

问题是为什么在 devel mod_dir 中似乎在进行重定向,而在部署中却没有。

我在配置文件中执行了 grep 以查看 DirectorySlash 指令是否在某处被禁用并且什么也没找到。它既没有在开发中明确启用,所以我认为它应该默认启用。无论如何,我将其添加到部署主机上的 .htaccess 文件中:

DirectorySlash 开启

但它也没有用。

有什么提示吗?

【问题讨论】:

    标签: apache apache2 directory slash


    【解决方案1】:

    /admin 文件夹受密码保护。我不认为这是相关的,但事实上它是相关的。

    我的.htaccess 文件中也有这些规则:

        <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f 
        RewriteCond %{REQUEST_FILENAME} !-d 
        RewriteCond %{REQUEST_FILENAME} !-l
        RewriteRule .* index.php [L]
        </IfModule>
    

    问题与this 有关 - 请参阅here 以获得很好的解释。

    基本上,当 Apache 生成 401 错误要求浏览器输入密码时,它还会生成另一个不使用任何文件夹、目录或符号链接的请求,因此它被重定向到 index.php

    解决方法是将其添加到站点根文件夹的.htaccess 文件中:

    ErrorDocument 401 /error/null.html
    ErrorDocument 403 /error/null.html
    

    并创建该文件,例如:

    touch ./error/null.html
    

    这些不是最佳实践,但在我寻找更好的解决方案时,它们现在可以使用。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 2016-02-01
      • 2020-09-23
      • 2010-12-05
      • 2011-06-14
      • 2015-01-10
      • 2016-02-24
      • 2011-01-18
      • 2018-06-20
      相关资源
      最近更新 更多