如何仅允许特定目录使用 htaccess?

如何仅允许特定目录使用 htaccess?

目前,我在 apache2.conf 中已AllowOverride all进行设置/var/www,仅允许服务器上所有站点(即 Ubuntu,9.04)使用 htaccess。

但是,我宁愿只允许在每个站点根目录中覆盖,而不允许在其他目录中覆盖。换句话说,、/var/www/site1/var/www/site2可以有 htaccess,但包括/var/www和在内的所有其他目录/var/www/site1/content都不能。

有没有办法做到这一点,而不必为服务器上的每个站点编写规则?

编辑:也许我的问题不够清楚。但我刚刚尝试了一些方法,但效果不如预期。我先设置了AllowOverride none根目录,然后all设置了特定目录,如下所示:

<Directory ~ "^/var/www/site1$">
  AllowOverride all
</Directory>

但是,当加载 URL 时,例如site1.com/section/page无法找到页面(显示浏览器错误页面,而不是我的 404 页面)。请注意,section/page这不是真正的文件系统 URL,而是重写。

我的理解是:

  1. /var/www/site1/section在之前的配置中,Apache 会在(不存在的)中查找 htaccess ,然后尝试/var/www/site1,然后尝试任何父目录。
  2. 使用上述指令,Apache 现在应该只查看/var/www/site1而不查看其他目录。但这似乎不起作用...

答案1

您可以指定任意数量的目录标签并独立配置它们。

您也可以通过 VirtualHost 来执行此操作。

喜欢:

<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from all
</Directory>

答案2

如果您使用虚拟主机,则可以通过虚拟主机进行设置。

高血压,

知识管理

答案3

我知道这已经很老了,但是如果其他人遇到这种情况,您可以在路径中使用标准“*”通配符,它​​可以匹配除斜杠之外的任何字符,因此以下内容会将 htaccess 限制为仅限您的站点根目录而不包含子目录:

<Directory />
    AllowOverride None
</Directory>
<Directory /var/www/site*>
    AllowOverride All
</Directory>
<Directory /var/www/site*/*>
    AllowOverride None
</Directory>

相关内容