IIS 10 网站设置 301 永久重定向
一、前言
最近为某网站,安装了 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 重定向”双击。
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 和 搜索引擎更加友好,所作的操作。
5、记得要保存设置哦,到此设置完毕。
三、通过 web.config 配置文件设置
最后,你会发现,通过上面的 IIS 设置,在网站目录下多了一个 web.config 配置文件,如果这个文件已存在,则会增加配置项。配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="true" destination="https://www.example.com$S$Q" exactDestination="true" httpResponseStatus="Permanent" />
</system.webServer>
</configuration>
其实,通过 web.config 配置文件,也可以设置 301 永久重定向。IIS 10 会默认加载网站根目录的 web.config 配置文件,假如你设置 IIS 10 默认不加载,那还需上面的 IIS 设置。
(完)