我有一个网站根据子域提供某些内容。所以它是同一组文件,也许网站页面中的标题和一些信息会根据子域而发生变化。
我需要根据子域进行不同的htpassword身份验证,但无法找到有关如何在htaccess中执行if / then类型事务的信息。
基本上我需要的是:
如果subdomain ='abc' 使用此htpassword文件
如果subdomain ='def' 使用此htpassword文件
可以这样做吗?
答案 0 :(得分:3)
尝试这样的事情:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
答案 1 :(得分:0)
您使用的是哪个网络服务器?
一种可以在几个不同的服务器上运行的技术(当然可以在apache中运行)是在每个子域对应的目录中有一个不同的.htaccess文件。
答案 2 :(得分:0)
如果是我(我以前没想过这样做),我会:
这样:
/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提供相同的站点文件,具体取决于子域。
希望这有点帮助,有点黑客。
有兴趣看看是否存在更好的东西。
答案 3 :(得分:0)
你不能使用if / else,因为htaccess不是指令列表。但是,如果你使用条件块,如&lt; IfModule mod_rewrite.c&gt;或者&lt; IfDefine something&gt;,您可以根据请求的子域使用不同的指令。我不确定你会使用哪一个......
您还可以将一个.htaccess文件放在文件上一级并使用&lt; Directory something&gt;为每个子域指定不同的规则,但使子域目录都是符号链接到共享文件的同一目录。
所以这将是web根目录上方的目录:
的.htaccess
sitefiles
subdomain1(符号链接到站点文件)
subdomain2(符号链接到站点文件)
...
答案 4 :(得分:0)
您可以使用带有感叹号的伪else。请参见下面的示例MemCache
与!MemCache
中的第二条指令:
<IfDefine MemCache>
LoadModule mem_cache_module modules/mod_mem_cache.so
</IfDefine>
<IfDefine !MemCache>
LoadModule cache_disk_module modules/mod_cache_disk.so
</IfDefine>
来自apache文档:https://httpd.apache.org/docs/2.4/mod/core.html#ifdefine