Перезапись 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 ответов
Один из способов ее решения - зарегистрировать два отдельных правила:
- Удалить www.
Принудительно 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, кажется, имеет синтетические записи для этого. Кто-нибудь использовал его успешно?