DNN UrlRewrite («DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules») не запускает пользовательское правило перезаписи в файле web.config - PullRequest
1 голос
/ 22 апреля 2020

На нашем сайте DNN, размещенном в службе приложений Azure, в нашем файле 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: // (наш azure webapp.com) /base3/index.html) мы постоянно получаем ошибку Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступен. , что сбивает с толку, поскольку это правило переписывания мы использовали на других наших сайтах.

Мы даже попробовали такой же подход для службы приложений fre sh, и вышеприведенное правило переписывания работает просто отлично.

Попытка выяснить, что не так, с помощью анализа heuristi c, на наше web.config теперь правило перезаписи работает, если:

под <system.webServer> <modules runAllManagedModulesForAllRequests="true">, тогда комментируя <add name="UrlRewrite" type="DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules" preCondition="managedHandler" />

Однако основной сайт теперь ломается ..

Как мы реализовать правило перезаписи, которое работает правильно с DotNetNuke.HttpModules.UrlRewriteModule, DotNetNuke.HttpModules ??

1 Ответ

1 голос
/ 23 апреля 2020

ОБНОВЛЕНИЕ

 <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>

enter image description here

PRIVIOUS

О функции перезаписи URL, причина в том, что веб-сервер, интегрированный службой приложений, не может иметь полный контроль. Вы можете сослаться на мой ответ в другой записи .

Вы можете использовать шлюз приложений для реализации функции перезаписи URL.

...