IIS URL 重写

IIS URL Rewrite

我有以下重写规则:

    <rewrite>
        <rules>
            <rule name="FrontController" stopProcessing="true">
                <match url="^(.*)$" ignoreCase="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Rewrite" url="wcf/api.svc/auth/home" />
            </rule>
        </rules>
    </rewrite>

这基本上将所有非文件 URL 重写为 Web 服务 api 在 WCF 支持的 SPA 中调用 returns index.html。

上面的重写最终包括原始 URL 中包含的所有查询字符串参数。我需要做的是将原来的 URL,例如 'wcf/api.svc/auth/products',作为查询字符串参数包含在重写的 URL 中,例如 'https://domain.com/wcf/api.svc/auth/products?enc=lkjewro8xlkz' being transformed into 'https://domain.com/wcf/api.svc/auth/home?enc=lkjewro8xlkz&orig=wcf/api.svc/auth/products'.

这可能吗?如果可以,我需要做哪些改变才能实现?我想让我的 WCF 应用程序了解原始 URL,以便它可以配置 SPA 以在加载时初始化为特定视图。

谢谢

很有可能。

您需要将 {REQUEST_URI}URL Encoded 值添加到 Rewrite URL。

<rewrite>
    <rules>
        <rule name="FrontController" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            </conditions>
            <action type="Rewrite" url="wcf/api.svc/auth/home?orig={UrlEncode:{REQUEST_URI}}" />
        </rule>
    </rules>
</rewrite>

使用此规则,在您的 WCF 端点中 orig 参数将是:

/wcf/api.svc/auth/products?enc=lkjewro8xlkz

如果您不需要查询字符串部分 (?enc=lkjewro8xlkz),您将需要一个额外的条件来匹配没有查询字符串的 URI。

<rewrite>
    <rules>
        <rule name="FrontController" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />

                <!-- match any character up to a question mark -->
                <add input="{REQUEST_URI}" pattern="^[^\?]+" />
            </conditions>

            <!-- {C:0} means the first match in conditions -->
            <action type="Rewrite" url="wcf/api.svc/auth/home?orig={UrlEncode:{C:0}}" />
        </rule>
    </rules>
</rewrite>

现在,orig 将在 WCF 端点中 /wcf/api.svc/auth/products

希望对您有所帮助。