目前,我在 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,而是重写。
我的理解是:
/var/www/site1/section
在之前的配置中,Apache 会在(不存在的)中查找 htaccess ,然后尝试/var/www/site1
,然后尝试任何父目录。- 使用上述指令,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>