我可以在htaccess中执行if / then / else吗?

时间:2009-08-05 18:25:55

标签: iis .htaccess isapi-rewrite

我有一个网站根据子域提供某些内容。所以它是同一组文件,也许网站页面中的标题和一些信息会根据子域而发生变化。

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

基本上我需要的是:

如果subdomain ='abc' 使用此htpassword文件

如果subdomain ='def' 使用此htpassword文件

可以这样做吗?

5 个答案:

答案 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)

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

  1. 根据某些因素(模拟IF / ELSE),使用 mod_rewrite 对不同的网站根目录(/ suba或/ subb)进行内部重定向
  2. 在公共目录中使用符号链接,但不使用.htaccess
  3. 这样:

    /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