it-swarm.com.ru

Веб-приложение Azure перенаправляет http на https

Я использую облако Azure с веб-приложением, и моя серверная сторона написана на nodejs. Когда веб-приложение получает запрос http, я хочу перенаправить запрос на https Я нашел решение . Я поместил его в свой веб Файл .config внутри тега rules 

        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>

Проблема в том, что когда я набираю в браузере " https://myURL.com ", все перенаправляется на главный экран, все в порядке, , Но когда я меняю https на http " http: // myURL. com "он перенаправляет на https://myURL.com/ " и добавляет к URL "bin/www" в соответствии с тем, что URL выглядит так " http://myURL.com/bin/ www ", ответ: страница не найдена.

Вопрос в том, как перенаправить чистый URL без добавления данных в URL?

Часть моего файла web.config:

<rewrite>
      <rules>
        <!-- Do not interfere with requests for node-inspector debugging -->
        <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
          <match url="^bin/www\/debug[\/]?" />
        </rule>
        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent">
          <action type="Rewrite" url="public{REQUEST_URI}" />
        </rule>
        <!-- All other URLs are mapped to the node.js site entry point -->
        <rule name="DynamicContent">
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
          </conditions>
          <action type="Rewrite" url="bin/www" />
        </rule>
        <!-- Redirect all traffic to SSL -->
         <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="false" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
    <!-- 'bin' directory has no special meaning in node.js and apps can be placed in it -->
    <security>
      <requestFiltering>
        <hiddenSegments>
          <remove segment="bin" />
        </hiddenSegments>
      </requestFiltering>
    </security>

Спасибо за ответы, Майкл.

7
Michael Horojanski

Для этого есть также бесплатное расширение с открытым исходным кодом.

  1. Перейдите на боковую панель настроек веб-приложения, найдите вкладку «Расширения» и нажмите «Добавить».

 Extension Tab

  1. Прокрутите вниз и найдите расширение Перенаправить HTTP на HTTPS с помощью gregjhogan.

 Add Extension

  1. Принять условия.

 Accept Terms

  1. Перезапустите веб-приложение, чтобы действия вступили в силу немедленно.

  2. Готово !

Для получения дополнительной информации о реализации этого расширения, проверьте исходный код на GitHub . Наиболее важным исходным файлом является applicationhost.xdt.

Цитата от GitHub (02-08-2017) (кредиты идут на gregjhogan):

applicationhost.xdt

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
    <location path="%XDT_SITENAME%" xdt:Transform="InsertIfMissing" xdt:Locator="Match(path)">
        <system.webServer xdt:Transform="InsertIfMissing">
            <rewrite xdt:Transform="InsertIfMissing">
                <rules xdt:Transform="InsertIfMissing" lockElements="clear">
                    <rule name="redirect HTTP to HTTPS" enabled="true" stopProcessing="true" lockItem="true">
                        <match url="(.*)" />
                        <conditions>
                            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                            <add input="{WARMUP_REQUEST}" pattern="1" negate="true" />
                        </conditions>
                        <action type="Redirect" url="https://{HTTP_Host}/{R:1}" appendQueryString="true" redirectType="Permanent" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </location>
</configuration>
5
pgmank

R: 1 является обратная ссылка к шаблону правила. Вы добавляете это к URL здесь:

url="https://{HTTP_Host}/{R:1}" 

изменив это в 

url="https://{HTTP_Host}" 

должно привести к перенаправлению в корень https.

3
LoekD

По состоянию на ноябрь 2017 года теперь это простой переход на портале Azure: «Только HTTPS» в пользовательских доменах.

https://blogs.msdn.Microsoft.com/benjaminperkins/2017/11/30/how-to-make-an-Azure-app-service-https-only/

Это также очень просто в ARM: “httpsOnly”: true

2
Johan Karlsson