Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iis 我可以在htaccess中执行if/then/else吗?_Iis_.htaccess_Isapi Rewrite - Fatal编程技术网

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

Iis 我可以在htaccess中执行if/then/else吗?,iis,.htaccess,isapi-rewrite,Iis,.htaccess,Isapi Rewrite,我有一个网站,提供某些内容的子域的基础上。因此,它是同一组文件,并且站点页面中的标题和某些信息可能会根据子域发生变化 我也需要基于子域进行不同的htpassword身份验证,但找不到有关如何在htaccess中执行if/then类型操作的信息 基本上我需要的是: 如果子域='abc' 使用此密码文件 如果子域='def' 使用此密码文件 可以这样做吗?您正在使用哪个Web服务器 一种可能在多个不同服务器上工作的技术(在apache中当然可以工作)是在对应于每个子域的目录中有一个不同的.htacc

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

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

基本上我需要的是:

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

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


可以这样做吗?

您正在使用哪个Web服务器

一种可能在多个不同服务器上工作的技术(在apache中当然可以工作)是在对应于每个子域的目录中有一个不同的.htaccess文件。

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

  • 根据某些因素(模拟IF/ELSE),使用mod_rewrite对不同的站点根(/suba或/subb)进行内部重定向
  • 在公用目录上使用符号链接,但不要使用.htaccess
  • 因此:

    在哪里

    使用

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

    这意味着您正在使用不同的.htaccess(取决于子域)有效地为相同的站点文件提供服务

    希望这能有所帮助,有点麻烦


    我想看看是否有更好的东西存在。

    您不能使用if/else,因为htaccess不是一个指令列表。但是,如果您使用像或这样的条件块,则可以根据请求的子域使用不同的指令。我不知道你会用哪一个

    您还可以将一个.htaccess文件放在文件之上一个级别,并使用为每个子域指定不同的规则,但要使子域目录与共享文件都是指向同一目录的符号链接

    因此,这将是web根目录上方的目录:
    .htaccess
    站点文件
    子域1(指向站点文件的符号链接)
    子域2(指向站点文件的符号链接)

    试试这样的方法:

    SetEnvIf Host ^abc\. HOST_ABC
    SetEnvIf Host ^dev\. HOST_DEF
    
    <IfDefine HOST_ABC>
        AuthUserFile …
    </IfDefine>
    <IfDefine HOST_DEF>
        AuthUserFile …
    </IfDefine>
    
    setenif主机^abc\。主持人(ABC)
    SetEnvIf主机^dev\。主机定义
    AuthUserFile…
    AuthUserFile…
    
    您可以使用带感叹号的伪else。请参见下面示例中的第二条指令
    MemCache
    vs
    !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>
    
    
    LoadModule mem_cache_module modules/mod_mem_cache.so
    LoadModule cache\u disk\u module modules/mod\u cache\u disk.so
    

    摘自apache文档:

    根据发布的问题,它是同一组文件,因此没有单独的目录。它是一个Win 2003服务器,使用IISpassword和ISAPIrewrite3的IIS。您的解决方案不起作用,因为文件系统中的子域没有物理上不同的文件集——所有子域都指向同一组文件,PHP计算子域并基于此显示不同的数据。谢谢..这看起来很棒-由于时间限制,我不得不在PHP中构建一个简单的auth,但我想在测试环境中尝试一下,因为这似乎是有意义的。谢谢虽然看起来很迷人,但对我来说并不管用。你能改一下这个秋葵吗?
    ln -s
    
    SetEnvIf Host ^abc\. HOST_ABC
    SetEnvIf Host ^dev\. HOST_DEF
    
    <IfDefine HOST_ABC>
        AuthUserFile …
    </IfDefine>
    <IfDefine HOST_DEF>
        AuthUserFile …
    </IfDefine>
    
    <IfDefine MemCache>
       LoadModule mem_cache_module   modules/mod_mem_cache.so
    </IfDefine>
    <IfDefine !MemCache>
       LoadModule cache_disk_module   modules/mod_cache_disk.so
    </IfDefine>