49

我需要将非 www url 重定向到 http 和 https url 的 www url。我尝试在 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

请帮助我更正我的规则。

4

7 回答 7

63

对于适用于两种情况的更安全的规则Match AnyMatch 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>

参考

于 2013-07-18T05:57:31.347 回答
22

这里的其他答案是不必要的,这是我使用的规则(只需复制和粘贴):

<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 协议

希望这可以帮助。

于 2017-09-21T21:31:22.297 回答
10

从 2018 年开始,考虑每次都使用 https (SSL) !

所以我一起使用重定向到 www 和到 https 。

<rule name="Redirect to www" stopProcessing="true">
    <match url="(.*)" />
    <conditions trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^example.com$" />
    </conditions>
    <action type="Redirect" url="https://www.example.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

于 2018-04-19T09:08:10.200 回答
2

我知道这是一个旧帖子,但没有完全回答。我最终扩展了Satpals 的答案

第一条规则捕获 http + www,第二条规则捕获非 www

由于某种原因,我无法在第一条规则中使用 MapProtocol,但它可以与直接写入 url 的 https 一起使用。

<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>
于 2017-06-13T11:00:45.490 回答
1

这对我来说很好:-

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

于 2019-03-07T10:48:17.220 回答
0

这篇文章基本上适用于那些需要在 Windows 主机中将非 www 重定向到 www URL 的人。

在 web.config 文件中如下代码:

<system.webServer>
<rewrite>
<rules>
<rule name=”Redirect example.com to www.example.com HTTP” patternSyntax=”ECMAScript” stopProcessing=”true”&gt;
<match url=”.*” />
<conditions>
<add input=”{HTTP_HOST}” pattern=”^example.com$” />
<add input=”{HTTPS}” pattern=”off” />
</conditions>
<action type=”Redirect” url=”http://www.example.com/{R:0}” redirectType=”Permanent” appendQueryString=”true”/>
</rule>
<rule name=”Redirect domain.com to www.example.com HTTPS” patternSyntax=”ECMAScript” stopProcessing=”true”&gt;
<match url=”.*” />
<conditions>
<add input=”{HTTP_HOST}” pattern=”^domain.com$” />
<add input=”{HTTPS}” pattern=”on” />
</conditions>
<action type=”Redirect” url=”https://www.example.com/{R:0}” redirectType=”Permanent” appendQueryString=”true”/>
</rule>
</rules>
</rewrite>
</system.webServer>

请注意,在上面的代码中,有两个规则用于 http,另一个用于 https。为了避免在同一规则中 http 和 https 发生冲突,这里使用了两种不同的模式。

我希望它对你们有用……!!

于 2020-02-21T06:17:58.803 回答
-4

按照下面的步骤

1) 登录您网站的 Cpanel

2)点击主机设置

单击此处查看操作方法

3)选择首选域为 www.yourdomainame.com 例如:www.emodafinil.com

单击此处查看操作方法

于 2019-02-21T16:18:02.393 回答