2013-09-11 4 views
2

Я размещаю сайт на winhost, и я использую URL-адрес IIS URLRewrite, чтобы позволить подпапкам на хосте отображаться в поддомены.Приложение Kentico в подпапке и IIS URLRewrite?

т.е.

~/

~/MyApp/

~/KenticoCMS/

с URL IIS Rewrite правил в корневом web.config для маршрутизации запросов для «mydomain.com 'для перехода к ~/KenticoCMS/и запросов на «myapp.mydomain.com» для перехода на ~/myapp/

В настоящее время, когда я отключу переписать, mydomain.com/KenticoCMS/ co mes up fine.

Однако, когда я включаю переписать, я получаю исключение:

[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 

Кто-нибудь есть какие-либо предложения о том, как настроить сайт так, что он может работать в этой установке?

Edited добавить 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

Не могли бы вы показать свой код перезаписи? – Jono

+1

@JonoRR Я отредактировал это сообщение, чтобы включить правила перезаписи –

ответ

1

так что это довольно старый вопрос, но короткий ответ, что я думаю, что ваше предположение верно, то Кентико не нравится, что 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 для каждого поддомена.

Смежные вопросы