目前在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,它是一个重写。
我的理解是:
/var/www/site1/section (不存在)中查找htaccess,然后尝试/var/www/site1 ,然后尝试任何父目录。 /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>