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
。
希望对您有所帮助。
我有以下重写规则:
<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
。
希望对您有所帮助。