Как получить перезапись URL для HTTP на HTTP и не WWW в WWW для работы
Я был в сети, ища решения для этого, но я могу заставить только 1 и 2 работать.
http://www.example.com
вhttps://www.example.com
www.example.com
вhttps://www.example.com
http://example.com
вhttps://www.example.com
https://example.com
вhttps://www.example.com
https://example.com
вhttps://www.example.com
example.com/page.aspx
вhttps://www.example.com/page.aspx
Требования:
- Все URL должны быть HTTPS
- Все URL без WWW в них, чтобы показать WWW
- Все остальные перенаправления на работу, запросы строк и параметров переносятся и т. Д.
Таким образом, основная проблема заключается в том, что если протокол не указан (http
или же https
) тогда если я войду example.com/blah
тогда он преобразуется в www.example.com/blah
но поставить протокол (http
или же https
) впереди и это разрывает связь.
Поскольку в настоящее время у меня нет правила для перемещения не-WWW URL-адресов в 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
, но они не работают, если нет www
в URL.
Таким образом, кажется, проблема заключается в перенаправлении не-WWW URL-адресов в 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
Поэтому я немного запутался в том, что на самом деле заставляет не-WWW-URL переходить на WWW-URL. В качестве команды, которую я сейчас использую в файле web.config, упоминается только HTTPS.
Я думаю, может быть, есть что-то в IIS (я не эксперт IIS 8), который что-то установил для этого, или установка одного из значений должна быть доменом без WWW в нем.
Любая помощь приветствуется. Я сомневаюсь, что есть много URL-адресов, указывающих на мой сайт без WWW, но для SEO было бы неплохо знать, что я могу заставить их всех попасть в одно место, чтобы не попасться на дублирующийся контент.
1 ответ
Попробуйте код ниже:
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
Как заставить HTTPS использовать файл web.config