Как получить перезапись URL для HTTP на HTTP и не WWW в WWW для работы

Я был в сети, ища решения для этого, но я могу заставить только 1 и 2 работать.

  1. http://www.example.com в https://www.example.com
  2. www.example.com в https://www.example.com
  3. http://example.com в https://www.example.com
  4. https://example.com в https://www.example.com
  5. https://example.com в https://www.example.com
  6. 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

IIS 7.5 URL Redirect для определенных шаблонов

Переопределить правило перезаписи IIS для дочернего сайта?

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