自定义IIS重写提供程序重写目标

本文关键字:重写 程序 目标 IIS 自定义 | 更新日期: 2023-09-27 18:03:16

我正在为IIS编写一个自定义重写提供程序,以便根据是否满足某些条件将用户发送到不同的站点。因此,如果用户符合条件,则url不会被重写,用户可以正常进行操作。如果用户不符合标准,url将被重写以加载不同的站点,而看起来是在相同的url上。

如果像这样设置提供者的重写部分,那么url将不受影响,并且用户将按预期发送到站点。

public string Rewrite(string value)
{
    return value;
}

如果将提供者的重写部分设置为这样,则url将被重写,并向用户发送备用站点。

public string Rewrite(string value)
{
    return alternateSite;
}

然而,如果我使用以下设置,如果用户不符合标准,他们最终会在替代站点中。但是,如果它们确实符合条件,它们最终会在重定向循环中结束。

public string Rewrite(string value)
{
    string newVal = alternateSite;
    if (user != null)
    {
        if (user.status == 1)
        {
            newVal = value;
        }
    }
    return newVal;
}

有什么办法可以防止这个循环,让网站正确加载吗?

感谢

EDIT仍然不高兴。我怀疑,如果我可以让提供者在用户满足凭据的情况下不执行重写(相当于在标准重写规则上将操作设置为none),那么它应该继续正常加载。然而,我不知道如何做到这一点。

自定义IIS重写提供程序重写目标

这样做的问题是,提供程序只在初始化时为提供程序设置变量,或者是缓存这些变量。然后将这些值用于多个调用上的多个会话。这对于连接字符串这样的常量是可以的,但对于存储在cookie中的用户id这样的常量就不行了。相反,我将用户id作为重写本身的一部分发送,并将其作为重写的一部分在提供者逻辑中分离出来,如下所示:

在IIS

{myProvider: {URL} + {HTTP_COOKIE}}

在提供者

public string Rewrite(string value)
{
    string[] values = value.Split('+');
    string requestUrl = values[0];
    string cookieStr = "";
    if (values.Length > 1)
    {
        cookieStr = values[1];
    }
    ...

这迫使提供者每次都获得新的数据,现在重定向是他们应该去的。

希望对大家有所帮助