Apache身份验证:允许公共访问子目录


13

这可能是一个简单的问题,但是我无法在文档中找到解决方案。

我想使用BASIC身份验证来密码保护我的网站。但是我希望子目录不受保护:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

保护所有站点都没有问题,但是我不知道如何“取消保护”一个目录。该站点托管在共享主机上,因此我只能访问.htaccess文件来进行配置。

是否有否定认证的指令?

谢谢您的帮助 ...


这似乎是最正确的解决方案:stackoverflow.com/questions/2641646/…–
BryanK

Answers:


10

.htaccess应该不会有问题,具体取决于主机允许的内容。

您可以尝试使用以下命令将.htaccess放在子文件夹中,尽管必须为其所在目录启用替代功能。

 Allow From All
 Satisfy Any

1
这里的秘诀是IIRC,它是将.htaccess放在您网站的根目录,但在该.htaccess文件中有一个条目,就像Cylindric所说的那样。
Paul Lathrop

并且不要忘记添加(或确保存在)AllowOverride,以便使用.htaccess。
TCampbell,

1
@Paul-我已经删除了答案,但是AFAICR Cylindric的答案当前错了吗?子目录中的.htaccess文件不能覆盖更高的目录。但是,父目录中的.htaccess文件也可以包含子目录的控件(或实际上将其删除)。
Alnitak

我尝试将<Directory />指令放在根文件夹和要公开的文件夹中,但是在两种情况下,我都得到HTTP500。还有其他想法吗?
Guillaume

1
尽管可以使用<Files>和<Location>,但是无法在.htaccess中使用<Directory>
-Alnitak

7

OK,对于路径server.com/private/public:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

此处的关键是“满足任何条件”,对上游的要求进行“或”运算。“全部满意”是默认设置。


感谢您解释“让任何人满意”👍–
Mario

1

我相信这可以做到:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

使用<Location>进行访问控制绝不是一个好主意。它仅通过名称而不是资源本身来控制访问。因此,任何通过其他名称(例如,别名)提供对它的访问权限的对象都不会应用访问控制。
CK。

1
@CK实际上,如果所讨论的位置不是物理目录,而仅仅是伪装成mod_rewrite之类的“虚拟”目录,则必须使用Location。
Natalie Adams 2010年

0

我设法解决此问题:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

请勿使用位置信息,因为它们是区分大小写的,它们不对实际的文件夹访问起作用,而只是对URL起作用。

因此,例如,如果我写

http:/mywebsite/STUFF

要么

http://mywebsite/stuff

要么

http://mywebsite/StUfF

即使所调用的物理目录相同,位置控制也会有所不同!!!

简而言之,您检查目录“ stuff”的访问权限,而我可以用不同的大小写形式来编写它。

另外,在单个目录上使用.htaccess文件并在其他目录上进行位置控制对我也不起作用。

希望能帮助到你。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.