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

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

  1. http://www.example.com to https://www.example.com
  2. www.example.com to https://www.example.com
  3. http://example.com to https://www.example.com
  4. https://example.com to https://www.example.com
  5. https://example.com to https://www.example.com
  6. example.com/page.aspx to https://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 было бы полезно знать, что я могу собрать их все в одном месте, чтобы не попасться на дублированный контент.


person MonkeyMagix    schedule 24.07.2016    source источник


Ответы (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

Перенаправление URL-адресов IIS 7.5 для определенных шаблонов

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

person Bhuwan Pandey    schedule 25.07.2016