Подтвердить что ты не робот

Web.config перенаправляет не-www на www

Мне нужно перенаправить URL-адреса, отличные от www, на URL-адрес URL-адреса для URL-адресов http и https. Я пробовал следующие правила в web.config.

<rule name="Redirect to WWW" stopProcessing="true">
<match url=".*" />
<conditions>
    <add input="{HTTP_HOST}" pattern="^domain.com$" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:0}" redirectType="Permanent" />

<rule name="Redirect to WWW https" stopProcessing="true">
<match url=".*" />
<conditions>
    <add input="{HTTPS}" pattern="^domain.com$" />
</conditions>
<action type="Redirect" url="https://www.domain.com/{R:0}" redirectType="Permanent" />

Он отлично работает для не-ssl-url, но в случае ssl он перенаправляет из https://domain.com в http://www.domain.com

Пожалуйста, помогите мне исправить мои правила.

4b9b3361

Ответ 1

Для более безопасного правила, которое работает для ситуаций Match Any и Match All, вы можете использовать решение Rewrite Map. Это идеальное решение, единственным недостатком которого является столь небольшое дополнительное усилие, чтобы настроить его, так как вам нужно создать карту перезаписи до того, как вы создадите правило. Другими словами, если вы решите использовать это в качестве единственного метода обработки протокола, вы будете в безопасности.

Вы можете создать карту перезаписи с именем MapProtocol, вы можете использовать {MapProtocol:{HTTPS}} для протокола в рамках любого действия правила.

<rewrite>
  <rules>
    <rule name="Redirect to www" stopProcessing="true">
      <match url="(.*)" />
      <conditions trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^domain.com$" />
      </conditions>
      <action type="Redirect" 
        url="{MapProtocol:{HTTPS}}://www.domain.com/{R:1}" />
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="MapProtocol">
      <add key="on" value="https" />
      <add key="off" value="http" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>

Ссылка

Ответ 2

Другие ответы здесь не нужны, здесь правило, которое я использую (просто скопируйте и вставьте):

<rule name="ensurewww" stopProcessing="true">
  <match url=".*" />
  <conditions>
    <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" />
  </conditions>
  <action type="Redirect" url="{C:1}://www.{C:2}" redirectType="Permanent" />
</rule>

Это будет перенаправлено на версию www, сохраняя протокол HTTP и HTTPS

Надеюсь, что это поможет.

Ответ 3

С 2018 года каждый раз используйте https (SSL)!

Поэтому я использую перенаправление на www и https вместе.

<rule name="Redirect to www" stopProcessing="true">
    <match url="(.*)" />
    <conditions trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^domain.com$" />
    </conditions>
    <action type="Redirect" url="https://www.comain.com/{R:1}" redirectType="Permanent" />
</rule>

<rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>

дополнительная информация здесь: https://forums.realmacsoftware.com/t/effective-july-2018-google-s-chrome-browser-will-mark-non-https-sites-as-not-secure/18597

Ответ 4

Я знаю, что это старый пост, но он не ответил полностью. Я закончил тем, что ответил Satpals

Первое правило ловит http + www, а второе - не-www

По какой-то причине я не мог использовать MapProtocol в кулачном правиле, но он работает с https, написанным непосредственно в URL-адресе.

<rewrite>
  <rules>
    <rule name="Special case www &amp; HTTPS off" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^www\.example\.com$" />
        <add input="{HTTPS}" pattern="off" />
      </conditions>
      <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="SeeOther" />
    </rule>
    <rule name="Redirect to www &amp; HTTPS" enabled="true" stopProcessing="true">
      <match url="(.*)" />
      <conditions trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^example\.com$" />
      </conditions>
      <action type="Redirect" url="{MapProtocol:{HTTPS}}://www.example.com/{R:1}" redirectType="SeeOther" />
    </rule>
  </rules>
  <rewriteMaps>
    <rewriteMap name="MapProtocol">
      <add key="on" value="https" />
      <add key="off" value="http" />
    </rewriteMap>
  </rewriteMaps>
</rewrite>

Ответ 5

Привет, кто-нибудь может мне помочь? Я не эксперт по IIS, поэтому у меня есть этот web.config, но я хочу добавить перенаправление с не www-вызовов на www. Большое спасибо!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="WordPress Rule" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>