赞
踩
首先来看一下 web.config 基本文件格式
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <system.webServer>
- <rewrite>
- <rules>
- <rule name="Rewrite" stopProcessing="true">
- <match url="(.*)" ignoreCase="true" />
- <conditions logicalGrouping="MatchAll">
- <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
- <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
- </conditions>
- <action type="Rewrite" url="index.php" />
- </rule>
- <rule name="Rewrite" stopProcessing="true">
- ...
- </rule>
- </rules>
- </rewrite>
- </system.webServer>
- </configuration>
如果要添加多个规格,只需要添加 <rule>...</rule>
对就可以了
<match>
标签为规则模式,用于匹配 URL 字符串的正则表达式或通配符。
<conditions>
可选条件模式,如验证请求的 URL 是否对应于物理文件系统上的文件或目录。
如果这两者模式任一个不满足,URL 重写模块将立即停止处理该规则,并执行下一个规则,如果都匹配,就执行 <action>
动作,如果设置 stopProcessing="true"
,程序就会被终止,不再往下继续了,为 false 会继续执行下一规则,stopProcessing 默认值为 false。
请求的 URL 如何与规则模式匹配呢?
HTTP URL 请求字符串格式:http(s)://<host>:<port>/<path>?<querystring>
<host>
转换为 HTTP_HOST 服务器变量,在 <conditions>
条件模式中访问
<port>
转换为 SERVER_PORT 服务器变量,在 <conditions>
条件模式中访问
<path>
部分与 <match>
规则模式的 rul 属性正则表达式进行匹配
<querystring>
转换为 QUERY_STRING 服务器变量,在 条件模式中访问
http(s) :通过服务器变量 SERVER_PORT_SECURE 和 HTTPS 可判断是否安全链接,当 HTTP 请求时,SERVER_PORT_SECURE 为0,HTTPS 为 OFF,否则为 1 和 ON
服务器变量 REQUEST_URI 可用于访问整个路径,包括 <path>
和 <querystring>
ignoreCase 忽略大小写,true 为忽略
negate 是否匹配模式,为 true 时, 当 URL 与指定模式不匹配时,才执行操作
logicalGrouping 条件满足情况,如果为 MatchAll ,所有条件都必须满足,MatchAny 至少满足一个条件
以下属性来使用条件模式
matchType 又分为 3 中情况
执行重定向动作,url 属性为重定向的路径
redirectType 为 Redirect 指定状态码
引用变量的使用
当 URL 与规则模式正则匹配时,匹配结果会生成引用变量,例子说明
<add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" />
如果字符串是:www.tianlunvip.com 会产生以下引用变量索引
- {C:0} - www.tianlunvip.com
- {C:1} - www.
- {C:2} - tianlunvip.com
对条件模式的后向引用用 {C:N} 标识,对规则模式的后向引用用 {R:N} 标识,其中 N 为 0 到 9
其它可用服务器变量
实战例子
1、将 HTTP 的链接重定向到 HTTTS 安全链接
- <rule name="301" stopProcessing="true">
- <match url="^(.*)$" ignoreCase="false" />
- <conditions logicalGrouping="MatchAll">
- <add input="{HTTPS}" pattern="^ON$" negate="true" />
- </conditions>
- <action type="Redirect" url="https://www.tianlunvip.com/{R:1}" redirectType="Permanent" />
- </rule>
2、将 www.foo.com 域名重定向到 www.tianlunvip.com
- <rule name="301" stopProcessing="true">
- <match url="(.*)" />
- <conditions logicalGrouping="MatchAny">
- <add input="{HTTP_HOST}" pattern="^www.foo.com$" />
- </conditions>
- <action type="Redirect" url="https://www.tianlunvip.com/{R:0}" redirectType="Permanent" />
- </rule>
3、用短链接替代真实链接地址
- <rule name="Rewrite" stopProcessing="true">
- <match url="^post\/(.*)$" ignoreCase="false" />
- <conditions logicalGrouping="MatchAll">
- <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
- <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
- </conditions>
- <action type="Rewrite" url="post/index.php?p={R:2}" />
- </rule>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。