我在winhost上托管一个网站,我正在使用IIS URLRewrite来允许主机上的子文件夹映射到子域。
即
〜/
〜/ MyApp的/
〜/ KenticoCMS /
使用IIS URL在根web.config中重写规则,以便将“mydomain.com”的请求路由到〜/ KenticoCMS /并请求“myapp.mydomain.com”路由到〜/ myapp /
目前,当我禁用重写时,mydomain.com/KenticoCMS/就可以了。
然而,当我启用重写时,我得到一个例外:
[ArgumentOutOfRangeException: startIndex cannot be larger than length of string. Parameter name: startIndex]
System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy) +10698899
CMS.URLRewritingEngine.URLRewriter.CheckPermissions(String siteName, PageInfo pi, Boolean excludeSystem) +235
CMSAppBase.CheckSecurity() +775
CMSAppBase.CMSAcquireRequestState(Object sender, EventArgs e) +606
CMS.CMSHelper.CMSApplicationModule.app_AcquireRequestState(Object sender, EventArgs e) +22
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
任何人都有关于如何配置网站的建议,以便它可以在此设置中工作?
编辑从根文件夹添加web.config并重写代码:
我相信,问题是Kentico应用程序认为它位于子文件夹(它是)但没有通过URL获取该子文件夹。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<rewrite>
<rules>
<rule name="Rewrite to Kentico" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^mydomain.com$" />
</conditions>
<action type="Rewrite" url="KenticoCMS/{R:1}" />
</rule>
<rule name="Rewrite to Myapp" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^myapp.mydomain.com$" />
</conditions>
<action type="Rewrite" url="myapp/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
答案 0 :(得分:1)
所以这是一个非常古老的问题,但简短的回答是我认为你的假设是正确的,Kentico并不认为URL已经以这种方式被改变了。
我之前做过类似的事情,如果其他人有这个问题应该会有所帮助,但它会执行重定向而不是重写。
我设置了以下规则:
<rule name="all subdomains" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="(myapp)\.example\.com" />
</conditions>
<action type="Redirect" url="http://example.com/{C:1}{URL}" redirectType="Found" />
</rule>
显然,您可以更改重定向类型等但关键是它是重定向而不是重写,所以它并不完全是您所指向的在最初的问题中。
假设您拥有/拥有子域的有效许可证密钥,我不确定为什么您需要或想要通过重写来执行此操作,因为您可以为每个子域设置一个IIS站点。