我有一个网站,根据子域提供某些内容。因此,这是同一组文件,并且站点页面中的标头和某些信息可能会根据子域而变化。

我还需要基于子域进行不同的 htpassword 身份验证,但无法找到有关如何在 htaccess 中执行 if/then 类型的操作的信息。

基本上我需要的是这样的:

如果子域 = 'abc' 使用此 htpassword 文件

如果子域 = 'def 使用此 htpassword 文件

这可以做到吗?

有帮助吗?

解决方案

尝试是这样的:

SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>

其他提示

其中web服务器是您使用?

这可以在几个不同的服务器工作(它肯定工作在阿帕奇)的技术是为在对应于每个子域的目录不同的.htaccess文件。

如果是我(我以前没有想过这样做)我会:

  1. 使用内部重定向 模组重写 根据某些因素(模拟 IF/ELSE)到不同的站点根目录(/suba 或 /subb)
  2. 使用 符号链接 在公共目录上,但不在 .htaccess 上

所以:

/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub

在哪里

/sites/subdomain_a/pub == /sites/subdomain_b/pub

使用

ln -s

或类似的。然后使用 mod_rewrite 重定向(内部)到正确的站点根目录。我 思考 mod_rewrite 在加载 .htaccess 之前运行。

这意味着您可以根据子域使用不同的 .htaccess 有效地提供相同的站点文件。

希望这会有所帮助,有点黑客。

有兴趣看看是否存在更好的东西。

由于htaccess并不一系列指令,不能使用的if / else。但是,如果你使用像一个条件块,您可以使用基于其请求的子域不同的指令。我不知道你会虽然使用哪一个......

您也可以把一个.htaccess文件一个级别的文件上方,然后使用<目录的东西>为每个子域指定不同的规则,但让子域目录中的所有符号链接可以与共享文件同一目录下。

所以这将是上面的Web根(一个或多个)的目录:点击 的.htaccess结果 sitefiles结果 subdomain1(符号链接指向sitefiles)点击 subdomain2(符号链接指向sitefiles)点击 ...

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