我不知道如何禁用.well-known
目录的身份验证。
当我删除 SVN 特定指令(DAV、SVNPath、AuthzSVNAccessFile)时,一切都按预期运行。
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "C:/www.example.com"
ServerAdmin [email protected]
SSLEngine On
SSLCertificateFile "C:/Apache2/conf/ssl/www.example.com.crt"
SSLCertificateKeyFile "C:/Apache2/conf/ssl/www.example.com.key"
<Location />
DAV svn
SVNPath "C:/svnrepo"
SSLRequireSSL
AuthName "www.example.com"
AuthType Basic
AuthUserFile "conf/svn/svn-users.txt"
AuthGroupFile "conf/svn/svn-groups.txt"
AuthzSVNAccessFile "conf/svn/svn-access.txt"
Require valid-user
</Location>
<Location "/.well-known">
Satisfy Any
Allow from all
Require all granted
# Apache 2.4 only
#AuthType None
</Location>
</VirtualHost>
编辑:如果我没有重叠路径,它也会起作用。例如使用/svn
和/.well-known
。不幸的是,这不是我现在可以轻松更改的事情。
答案1
您可以检查 apacheDirectory
选项。下面是一个配置示例:
<Directory /home/html/.well-known/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
答案2
.htaccess
在您的 webroot 中,创建一个包含以下内容的文件:
Options +Indexes
<IfModule mod_rewrite.c>
RewriteRule "/\.|^\.(?!well-known/)" - [F]
</IfModule>
您需要启用 ModRewrite 才能使其正常工作。
答案3
仅供参考:我最终决定咬紧牙关,将我的 svn 仓库的路径更改为https://svn.domain.com/repo(而不是使用根)。
在经历了各种系统和框架的诸多复杂情况之后,我决定对所有托管应用程序都遵循这种模式,即始终使用
- 子域名
- 应用程序上下文路径
例如https://subdomain.domain.com/context
这使得将来引入负载平衡、同一域下的多个应用程序、同一服务器上的多个应用程序等的所有选项都保持开放。并且配置通常可以工作,因为不会有任何重叠的路径。
当然,在所有客户端中切换 svn repo 路径是很痛苦的。