我有以下目录布局:
/var/www/ example.com/ logs/ html/ stuff/
Apacheconfiguration通常从/var/www/example.com/html
我已经configurationwebdav工作的urlhttps://example.com/server-admin
并允许访问其他目录:
<VirtualHost> ... Alias /server-admin /var/www/example.com/ <Location /server-admin > Dav on AllowOverride None ...
使用AllowOverride None
我想禁用htaccess文件,以便他们不会中断webdav操作。
这种作品。 但是 :如果我上传一个语法错误的htaccess文件,一切都会崩溃,500内部服务器错误。 我猜即使这样的文件没有被使用,Apache仍然parsing它。
所以我尝试使用AccessFilename .davaccess
来更改它,使其他名称,哪种工作,但不是在<Location>
而是全局在<VirtualHost>
。
那么该怎么办? 如何禁用<Location>
htaccess,或者如何更改布局才能使其工作?
您将需要使用<Directory>
容器而不是<Location>
容器来应用AllowOverride
指令。 虽然AllowOverride
指令具有“目录”上下文(意味着它通常在<Location>
和<Directory>
容器等中都是允许的),但是还有一个特定的限制 :
AllowOverride
指令只能在<Directory>
部分中使用。
这似乎是合理的,因为.htaccess
文件适用于物理目录,而不是严格的URL(尽pipeURL通常映射到物理目录)。 ( <Directory>
容器在请求中的处理也要早得多, <Location>
容器处理得比较晚)。
顺便提一句,你还需要在Apache 2.4上设置AllowOverrideList None
来完全禁用.htaccess
文件。 根据AllowOverride
文档 :
当此指令设置为None且AllowOverrideList设置为None时, .htaccess文件将被完全忽略 。 在这种情况下, 服务器甚至不会尝试读取文件系统中的.htaccess文件 。
目前我没有看到.htaccess
(每个目录的configuration文件)如何有条件地启用文件系统的一个区域(在单个虚拟主机下)。 他们要么启用或不启用。
参考:
更新:对此的解决scheme/解决方法是可能有一个完全独立的VirtualHost(也许是相同的主机 ,但不同的端口 ?)只是指向文件系统的相同区域的WebDAV,其中.htaccess
完全禁用。 但是,点文件(主要是.htaccess
和.htpasswd
)也是默认保护的,所以如果需要读取访问权限,您需要重写。