我可以在 htaccess 中执行 if/then/else 操作吗?
-
22-07-2019 - |
题
我有一个网站,根据子域提供某些内容。因此,这是同一组文件,并且站点页面中的标头和某些信息可能会根据子域而变化。
我还需要基于子域进行不同的 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文件。
如果是我(我以前没有想过这样做)我会:
- 使用内部重定向 模组重写 根据某些因素(模拟 IF/ELSE)到不同的站点根目录(/suba 或 /subb)
- 使用 符号链接 在公共目录上,但不在 .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)点击 ...