Я искал в Интернете решения для этого, но я могу заставить работать только 1 и 2.
http://www.example.com
tohttps://www.example.com
www.example.com
tohttps://www.example.com
http://example.com
tohttps://www.example.com
https://example.com
tohttps://www.example.com
https://example.com
tohttps://www.example.com
example.com/page.aspx
tohttps://www.example.com/page.aspx
Требования:
- Все URL должны быть HTTPS
- Все URL-адреса без WWW в них для отображения WWW
- Все остальные перенаправления на работу, перенесенные строки запроса и параметры и т. д.
Таким образом, основная проблема заключается в том, что если протокол не указан (http
или https
), то, если я введу example.com/blah
, он будет преобразован в www.example.com/blah
, но поместит протокол (http
или https
) впереди, и это разорвет связь.
Поскольку в настоящее время у меня нет правила для перемещения URL-адресов, отличных от WWW, в WWW, я не уверен, что это делает, если мне нужно это сделать, как я могу заставить его работать с HTTP на HTTPS.
Я попытался установить правила для HTTP для перехода на HTTPS вместе с правилом для не-WWW на WWW, но это не сработало (первый пример, который вы увидите — нижний пример — это то, что я использую в данный момент).
Я попытался использовать
{HTTP_HOST}
вместо записи URL-адреса моего сайта в части перенаправления правила.Я попытался разделить правила на 2: одно для HTTP на HTTPS и одно для без WWW на WWW.
Однако ничего не работает.
На данный момент я просто использую свой файл hosts и тренируюсь, меняя правила в файле web.config для сайта на коробке Win 2012.
У меня есть и другие правила, например, для www.example.com/plugins
переход на страницу (перезапись) под .aspx
, но они также не работают, если в URL-адресе нет www
.
Таким образом, кажется, что проблема заключается в перенаправлении URL-адресов, отличных от WWW, на WWW, и я не знаю, как лучше всего совместить это с правилами HTTP для HTTPS.
Я пробовал комбинацию двух правил, которые охватывают HTTPS/WWW и работают, кроме 4/5 (не-WWW для WWW), это то правило.
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="^[^www]" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
Между прочим, фактическое переключение с logicalGrouping="MatchAny"
на "MatchAll"
, похоже, не имеет значения.
Пока кто-то не вводит URL-адрес как http://example.com/plugins
, он работает нормально и перенаправляется на https://www.example.com/plugins
.
Не то чтобы я знаю много людей, которые на самом деле вводят протокол при вводе ссылок сейчас (//
тоже работает), но, очевидно, это старые поисковые системы и встроенные ссылки сайта, которые мне нужно обрабатывать для дублирования контента.
Кто-нибудь может подумать, почему это не работает ИЛИ что я должен попробовать?
У меня настроены привязки как для порта 80/443 для WWW, так и без него.
Я никогда не нахожу в ответах на подобные проблемы, что люди много говорят о настройках IIS, таких как привязки и порты, но я думаю, что они должны, поскольку web.config привязан к приложению перенаправления URL-адресов, и привязки, очевидно, необходимы для ваших адресов.
Я просто нахожу странным, что пример правила, который я привел ранее, работает так же хорошо, как и это, в котором упоминается только HTTP для HTTPS.
Это то, что я использую в настоящее время. Может быть, IIS что-то делает с www
?
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
Я даже изменил порядок привязок, чтобы привязки не-WWW шли перед привязками WWW, думая, что это может иметь какое-то отношение к этому.
Я контролирую свой DNS, и моя запись A установлена как
DNSEntry - WWW
Type - A
Destination - MY IP
Поэтому я немного смущен тем, что на самом деле заставляет URL-адреса, отличные от WWW, переходить на URL-адреса WWW. Поскольку команда, которую я сейчас использую в web.config, упоминает только HTTPS.
Я думаю, может быть, в IIS (я не эксперт IIS 8) есть что-то, что что-то настроило для этого, или настройка одного из значений должна была быть доменом без WWW.
Любая помощь приветствуется. Я сомневаюсь, что в любом случае есть много URL-адресов, указывающих на мой сайт без WWW, но для SEO было бы полезно знать, что я могу собрать их все в одном месте, чтобы не попасться на дублированный контент.