Перезапись URL для удаления www и перенаправления на https с помощью web-config (C# .net)

У меня есть следующий код в моей веб-конфигурации, чтобы иметь возможность перенаправлять URL-адреса с префиксом "www" и запросы без SSL на https: // mydomain.com, поскольку сертификат SSL зарегистрирован в домене без www

<rewrite>
  <rules>
    <rule name="Remove WWW prefix and redirect to https" >
      <match url="(.*)" ignoreCase="true" />
      <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" ignoreCase="true" />
        <add input="{HTTPS}" pattern="off" ignoreCase="true" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="https://mydomain.com/{R:1}" />
    </rule>
  </rules>
</rewrite>

Это результат:

1) http: // mydomain.com/something -> https:// mydomain.com/something (исправить)

2) http: // www.mydomain.com/something -> https:// mydomain.com/something (исправить)

3) https: // www.mydomain.com/something -> Показывает ошибку сертификата (есть проблема с сертификатом безопасности этого сайта.)

При выборе "Перейти на этот сайт (не рекомендуется)". на странице ошибки сертификата URL-адрес переписан правильно (https:// mydomain.com/something)

Как я могу убедиться, что ошибка сертификата не отображается?

Спасибо

5 ответов

Один из способов ее решения - зарегистрировать два отдельных правила:

  1. Удалить www.
  2. Принудительно HTTPS.

    <rule name="Remove www" stopProcessing="true">
      <match url="(.*)" negate="false"></match>
      <conditions>
        <add input="{HTTP_HOST}" pattern="^www\.(.*)$" />
      </conditions>
      <action type="Redirect" url="https://{C:1}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>
    <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="true" redirectType="Permanent" />
    </rule>
    

Поэтому мы используем это в наших проектах, и это работает.

Дайте мне знать, что это помогает:

<rewrite>
  <rules>
    <rule name="Redirect to https">
      <match url="(.*)"/>
      <conditions>
        <add input="{HTTPS}" pattern="Off"/>
        <add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
        <add input="{HTTP_HOST}" pattern="localhost" negate="true"/>
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
    </rule>
  </rules>
</rewrite>

Он также игнорирует запрос при доступе к сайту на локальном компьютере.

Я не уверен в этом, поскольку у меня нет большого опыта в переписывании URL, но я стараюсь не навредить.
Вы можете попробовать это

<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://mydomain.com/{R:1}" redirectType="Permanent" />

Я много гуглил и нашел это, но это может не сработать, как вы и хотели.

Эта проблема не может быть решена с помощью правил перезаписи: проблема в том, что сертификат проверяется во время установки соединения с сервером. Поскольку ваш сервер не имеет действительного сертификата для www. вариант, сертификат недействителен и браузер уведомит своего пользователя.

Только после того, как пользователь согласится продолжить, запрос отправляется на сервер и вступают в силу правила перезаписи.

Я вижу ту же проблему. Поскольку у домена нет SSL-сертификата для www, код web.config не удаляет www, если URL-адрес включает https. В результате используется http с www или без него, правильно перенаправляет его на https://domain, но если он начинается с https: и www, он зависает.

Так можно ли разрешить это на уровне DNS, чтобы www не определялся как CNAME и просто перенаправлялся туда? Google Domains, кажется, имеет синтетические записи для этого. Кто-нибудь использовал его успешно?

Другие вопросы по тегам