一旦首先应用了All,Apache AllowOverride none对子目录不起作用

时间:2012-09-27 10:00:10

标签: apache .htaccess

我不确定这里有什么问题,但我有以下内容:

    # 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文件,将其包含在目录中的任何位置。

我正在尝试做的是从此配置中排除“images”目录。 我为每个目录添加了一个特殊的标题,所以我可以调试它,并根据下面的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,根据标题(主页,图片) - 它首先得到“全部”然后应该用“无”覆盖它 - 但它没有,我我还在接收401,这可能是什么问题?

2 个答案:

答案 0 :(得分:1)

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

所以如果你有:

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

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

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

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

答案 1 :(得分:0)

通过使用“Satisfy Any”,我解决了没有AUTH用于子目录的问题

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

    Header always append Directory images
</Directory>