如何只允许特定的目录使用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> 

但是,当加载一个像site1.com/section/page这样的URL时,页面不能被find(显示浏览器错误页面,而不是我的404页面)。 注意section/page不是真正的文件系统URL,它是一个重写。

我的理解是:

  1. 在之前的configuration中,Apache会在/var/www/site1/section (不存在)中查找htaccess,然后尝试/var/www/site1 ,然后尝试任何父目录。
  2. 通过上面的指令,Apache现在只需要查看/var/www/site1而不需要其他目录。 但是,这似乎并没有工作…

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

你也可以通过VirtualHost做到这一点。

喜欢:

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

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

HTH,

KM

我知道这是相当古老的,但如果有其他人遇到这个问题,你可以在path中使用标准的“*”通配符,它​​匹配除了斜杠之外的任何字符,所以下面的例子将会限制htaccess只有你的站点根目录和子目录:

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