【问题标题】:Apache AllowOverride none doesn't work for sub-directories once All has been applied first一旦首先应用 All,Apache AllowOverride none 就不适用于子目录
【发布时间】:2012-09-27 10:00:09
【问题描述】:

我不确定这里出了什么问题,但我有以下配置:

    # Root
    <Directory /var/www/xxx/>
            AllowOverride All

            Header always append Directory Home
    </Directory>


    # images
    <Directory /var/www/xxx/images/>
            AllowOverride None

            Order allow,deny
            allow from all

            Header always append Directory images
    </Directory>

在根目录中,我有一个 .htaccess 文件,可以将它包含在目录中的任何位置。

我想要做的是从这个配置中排除“图像”目录。 我为每个目录添加了一个特殊的标头,以便我可以调试它,并根据下面的 CURL 命令 - 它正确地遵循了规则。

< HTTP/1.1 401 Authorization Required
< Directory: Home, images
< Last-Modified: Fri, 21 Sep 2012 09:47:28 GMT
< ETag: "9e81e5-4069-20b94c00"
< Accept-Ranges: bytes
< Content-Length: 16489
< Connection: close
< Content-Type: image/png

问题是我收到的是 401 而不是 200OK,根据标题(Home、images)——它首先得到“All”,然后应该用“None”覆盖它——但它没有,我我仍然收到 401,这可能是什么问题?

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    您在父目录中有一个需要授权的 htaccess 文件,该文件将应用于/images/ 目录。 AllowOverride 指令允许在 htaccess 文件中使用指令,它不会删除或禁止父 htaccess 文件可能具有的任何内容。

    如果你有:

    1. 文档根目录:AllowOverride All
    2. 文档根目录 htaccess 文件:需要验证,有效用户

    然后:

    1. 图片目录:AllowOverride None
    2. 图像目录 htaccess: 由于AllowOverride,此文件中的任何内容都不会被应用

    但父 htaccess 中的所有指令仍然适用。

    如果您希望将 /images 目录排除在要求身份验证之外,则需要在父 htaccess(或 vhost 配置,或任何您的设置)的身份验证设置中设置排除项。

    【讨论】:

    • 谢谢,从您的回答中,我实际上对 AllowOverride 有了更好的理解……尽管根据 Apache 文档 - 如果存在,它不应该请求和禁用 - .htaccess 文件当有“无”值,但仍从根目录应用。
    【解决方案2】:

    通过使用“满足任何”,我解决了子目录没有 AUTH 的问题

    <Directory /var/www/xxx/images/>
        allow from all
        Satisfy Any
    
        Header always append Directory images
    </Directory>
    

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 2013-10-25
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多