DNN UrlRewrite ("DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules") 不 运行 在 web.config 上自定义重写规则
DNN UrlRewrite ("DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules") does not run custom rewrite rule on web.config
在 Azure 应用服务中托管的 DNN 站点上,我们在 web.config 上设置了以下自定义规则:
<rewrite>
<rules>
<rule name="Proxy" stopProcessing="true">
<match url="^base3/?(.*)" />
<action type="Rewrite" url="https://(a website hosted in aws s3)/tx/{R:1}" />
<serverVariables>
<set name="HTTP_ACCEPT_ENCODING" value="" />
<set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_Blog" value="1" />
</serverVariables>
</rule>
</rules>
我们还在 applicationHost.xdt
中设置了以下内容
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_ORIGINAL_HOST" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_UNPROXIED_URL" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_ACCEPT_ENCODING" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_Mischief" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_Blog" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
</allowedServerVariables>
</rewrite>
</system.webServer>
</configuration>
但是,当尝试导航到它时 (https://(our azure webapp.com)/base3/index.html) 我们不断收到错误 The resource您要查找的内容已被删除、名称已更改或暂时不可用。 这令人困惑,因为这是我们在其他网站上使用的重写规则。
我们甚至在新的应用程序服务上尝试了相同的方法,上面的重写规则工作得很好..
试图通过启发式分析找出问题所在,在我们的 web.config 上,重写规则现在可以工作,如果:
在<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
之下
然后评论 <add name="UrlRewrite" type="DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules" preCondition="managedHandler" />
但是,主站点现在坏了..
我们如何实现与 DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules
一起正常工作的重写规则?
更新
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter" />
</configSections>
......
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>^default/([0-9]+)/([_0-9a-z-]+)</LookFor>
<SendTo>11.aspx?id={R:1}</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
原始
关于url重写的功能,原因是App Service集成的Web Server无法完全控制。你可以在另一个 .
中参考我的回答
您可以使用应用程序网关实现url重写功能。
在 Azure 应用服务中托管的 DNN 站点上,我们在 web.config 上设置了以下自定义规则:
<rewrite>
<rules>
<rule name="Proxy" stopProcessing="true">
<match url="^base3/?(.*)" />
<action type="Rewrite" url="https://(a website hosted in aws s3)/tx/{R:1}" />
<serverVariables>
<set name="HTTP_ACCEPT_ENCODING" value="" />
<set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_Blog" value="1" />
</serverVariables>
</rule>
</rules>
我们还在 applicationHost.xdt
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<proxy xdt:Transform="InsertIfMissing" enabled="true" preserveHostHeader="false" reverseRewriteHostInResponseHeaders="false" />
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_ORIGINAL_HOST" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_UNPROXIED_URL" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_ACCEPT_ENCODING" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_Mischief" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
<add name="HTTP_X_Blog" xdt:Transform="Insert" xdt:Locator="Match(name)"/>
</allowedServerVariables>
</rewrite>
</system.webServer>
</configuration>
但是,当尝试导航到它时 (https://(our azure webapp.com)/base3/index.html) 我们不断收到错误 The resource您要查找的内容已被删除、名称已更改或暂时不可用。 这令人困惑,因为这是我们在其他网站上使用的重写规则。
我们甚至在新的应用程序服务上尝试了相同的方法,上面的重写规则工作得很好..
试图通过启发式分析找出问题所在,在我们的 web.config 上,重写规则现在可以工作,如果:
在<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
之下
然后评论 <add name="UrlRewrite" type="DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules" preCondition="managedHandler" />
但是,主站点现在坏了..
我们如何实现与 DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules
一起正常工作的重写规则?
更新
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter" />
</configSections>
......
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>^default/([0-9]+)/([_0-9a-z-]+)</LookFor>
<SendTo>11.aspx?id={R:1}</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
原始
关于url重写的功能,原因是App Service集成的Web Server无法完全控制。你可以在另一个
您可以使用应用程序网关实现url重写功能。