我想知道是否有可能设置一个条件http基本的认证要求的基础上的虚拟机URL中的一个。就文件。

例如什么我要做的就是mysite.com 和test.mysite.com 跑掉相同的码基于同样的目录,但是密码保护test.mysite.com.它将设置这种方式这样我就不需要分行代码自我的应用程序的代码可以看到哪些虚拟主机/网址它正在提供和接的数据库,以提供内容。

有帮助吗?

解决方案

你可以暂且通过使用 mod_setenvif 随着 mod_auth 模块。使用 SetEnvIfNoCase 指定其主是密码保护。你会需要一些额外的指示,以满足访问:

# Check for the hostname here
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST

那么里面的 Directory 方块(或只是在公开)你有你的授权设置的东西,东西,像这样:

AuthUserFile /var/www/test.mysite.com/htpasswd
AuthType Basic
AuthName "Password Protected"

现在需要/能满足东西:

Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!PROTECTED_HOST

这将使它任何东道不匹配 ^test\.mysite\.com\.?(:80)?$ 将有权在不需要授权(Allow from env=!PROTECTED_HOST),但否则,我们需要一个有效的用户(Require valid-user).的 Satisfy any 确保我们只是需要2个,或者允许或要求。

其他提示

我在实施Jon解决方案时遇到问题: 尽管我对Apache conf和正则表达式非常熟悉,但始终会触发身份验证。经过快速分析,似乎好像没有出现Allow from env=!PROTECTED_HOST行。

但是我发现了另一种实际上对我来说更安全的解决方案:

我为两个域创建了两个虚拟主机,它们指向相同的文档根目录(这是完全允许的)。在其中一个虚拟主机中,我添加了基本身份验证的指令(直接添加到虚拟主机指令块中)。

像魅力一样工作。而且我有一种更好的感觉,那就是这确实是安全的-不用冒险忽略正则表达式模式中的任何细节,这些细节将为入侵者打开大门。 通用标签

这是一种类似于乔恩·林(Jon Lin)提出的解决方案,但使用RewriteCond来检查主机名: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top