IIS 10 网站设置 301 永久重定向

[TOCM]

一、前言

最近为某网站,安装了 SSL 证书,实现了全站 https 协议访问。由此产生一个新问题,在浏览器地址栏中直接输入网站域名,默认是使用 http 协议访问的,除非指定 https 协议访问,也就是全网址,类似这样 https://www.123si.org 才能正常访问。所以,要把用 http 协议访问的请求,全部 301 永久重定向到 https 协议的网站。还要把用 https 协议访问的 https://123si.org 不带 www 的请求,也 301 永久重定向到带 www 的主网址 https://www.123si.org。最终效果如下:

请求 端口 HTTP 重定向 目标
http://www.123si.org 80 永久(301) https://www.123si.org
http://123si.org 80 永久(301) https://www.123si.org
https://123si.org 443 永久(301) https://www.123si.org

为了网站 SEO 和 搜索引擎更加友好,对已经收录的网址,类似这样的http://域名/xxx/sss.html?a=b的网址,要带网址参数重定向,效果类似这样https://域名/xxx/sss.html?a=b,而不是重定向到首页。

二、IIS 10 网站设置

1、在 IIS 中,添加网站,保证网站能正常响应请求。

添加网站

2、在网站上鼠标右键,选择“编辑绑定”,添加网站绑定。

添加网站绑定

3、左侧选中网站,右侧选择“HTTP 重定向”双击。

HTTP 重定向

4、设置“HTTP 重定向”。勾选“将请求重定向到此目标”,并填写目标地址。勾选“将所有请求重定向到确切的目标(而不是相对于目标)”。状态代码选择“永久(301)”。

关于目标地址最后面的$S$Q,这是 IIS 重定向的参数。解释如下:

$S- 将请求的 URL 的后缀传递给新的 URL。后缀是用重定向的 URL 代替之后,初始 URL 中所保留的部分。如果未设置 EXACT_DESTINATION 标志,则结果目标 URL 的名称将具有所请求文件的名称(作为文件夹名称)以及文件名本身。

$Q- 将初始 URL 中的参数(如 querystring 参数)传递至新的 URL,包括问号 (?)。

IIS 重定向的参数还有很多,这里只介绍这两个最常用的,如果不加$S$Q,则重定向到指定地址,如果加上$S$Q,则重定向到指定地址 + 请求的 URL 的后缀 + URL 中的参数,也就是文章前面提到的,为了网站 SEO 和 搜索引擎更加友好,所作的操作。

HTTP 重定向

5、记得要保存设置哦,到此设置完毕。

三、通过 web.config 配置文件设置

最后,你会发现,通过上面的 IIS 设置,在网站目录下多了一个 web.config 配置文件,如果这个文件已存在,则会增加配置项。配置内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <system.webServer>
  4. <httpRedirect enabled="true" destination="https://www.example.com$S$Q" exactDestination="true" httpResponseStatus="Permanent" />
  5. </system.webServer>
  6. </configuration>

其实,通过 web.config 配置文件,也可以设置 301 永久重定向。IIS 10 会默认加载网站根目录的 web.config 配置文件,假如你设置 IIS 10 默认不加载,那还需上面的 IIS 设置。

(完)