当前位置:   article > 正文

web.config 重写规则详解_web.config rewrite

web.config rewrite

首先来看一下 web.config 基本文件格式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <system.webServer>
  4. <rewrite>
  5. <rules>
  6. <rule name="Rewrite" stopProcessing="true">
  7. <match url="(.*)" ignoreCase="true" />
  8. <conditions logicalGrouping="MatchAll">
  9. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  10. <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
  11. </conditions>
  12. <action type="Rewrite" url="index.php" />
  13. </rule>
  14. <rule name="Rewrite" stopProcessing="true">
  15. ...
  16. </rule>
  17. </rules>
  18. </rewrite>
  19. </system.webServer>
  20. </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 至少满足一个条件

以下属性来使用条件模式

  • input 匹配字符串
  • matchType 匹配类型

matchType 又分为 3 中情况

  • IsFile 判断是否为实际的物理路径文件,negate 为 true,表示不是文件
  • IsDirectory 判断请求的是否为实际的物理路径目录,negate 为 true,表示不是目录
  • Pattern 使用正则表达式与 input 字符串匹配,需要添加 pattern 属性使用正则

执行重定向动作,url 属性为重定向的路径

  • name=”Rewrite” 重写
  • name=”Redirect” 重定向
  • name=”CustomResponse” 自定义响应,发送 错误信息状态码
  • name=”AbortRequest” 终止请求

redirectType 为 Redirect 指定状态码

  • 301 – Permanent 永久
  • 302 – Found 已找到
  • 303 – See other 参阅其他
  • 307 – Temporary 临时

引用变量的使用

当 URL 与规则模式正则匹配时,匹配结果会生成引用变量,例子说明

<add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" />

如果字符串是:www.tianlunvip.com 会产生以下引用变量索引

  1. {C:0} - www.tianlunvip.com
  2. {C:1} - www.
  3. {C:2} - tianlunvip.com

对条件模式的后向引用用 {C:N} 标识,对规则模式的后向引用用 {R:N} 标识,其中 N 为 0 到 9

其它可用服务器变量

  • {CACHE_URL}
  • {DOCUMENT_ROOT}
  • {HTTP_URL}
  • {HTTP_HOST}
  • {PATH_INFO}
  • {PATH_TRANSLATED}
  • {QUERY_STRING}
  • {REQUEST_FILENAME}
  • {REQUEST_URI}
  • {SCRIPT_FILENAME}
  • {SCRIPT_NAME}
  • {SCRIPT_TRANSLATED}
  • {UNENCODED_URL}
  • {URL}
  • {URL_PATH_INFO}
  • {APP_POOL_ID}
  • {APPL_MD_PATH}
  • {APPL_PHYSICAL_PATH}
  • {GATEWAY_INTERFACE}
  • {SERVER_SOFTWARE}
  • {SSI_EXEC_DISABLED}
  • {HTTP_USER_AGENT}

实战例子

1、将 HTTP 的链接重定向到 HTTTS 安全链接

  1. <rule name="301" stopProcessing="true">
  2. <match url="^(.*)$" ignoreCase="false" />
  3. <conditions logicalGrouping="MatchAll">
  4. <add input="{HTTPS}" pattern="^ON$" negate="true" />
  5. </conditions>
  6. <action type="Redirect" url="https://www.tianlunvip.com/{R:1}" redirectType="Permanent" />
  7. </rule>

2、将 www.foo.com 域名重定向到 www.tianlunvip.com

  1. <rule name="301" stopProcessing="true">
  2. <match url="(.*)" />
  3. <conditions logicalGrouping="MatchAny">
  4. <add input="{HTTP_HOST}" pattern="^www.foo.com$" />
  5. </conditions>
  6. <action type="Redirect" url="https://www.tianlunvip.com/{R:0}" redirectType="Permanent" />
  7. </rule>

3、用短链接替代真实链接地址

  1. <rule name="Rewrite" stopProcessing="true">
  2. <match url="^post\/(.*)$" ignoreCase="false" />
  3. <conditions logicalGrouping="MatchAll">
  4. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
  5. <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
  6. </conditions>
  7. <action type="Rewrite" url="post/index.php?p={R:2}" />
  8. </rule>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/190119
推荐阅读
相关标签