ISAPI_Rewrite伪静态 升级到 IIS8.5+url重写 的过程 理论完工

asp2001_1 2019-12-26 07:42:44
原来用 ISAPI_Rewrite
很简单 直接在ini中加一句
RewriteRule /detail_(.*)_(.*).html /detail.asp\?catid=$1\&id=$2 [N,I]
就实现了伪静态页面和实际页面的转换
/detail/123/1000001.html
/detail.asp?catid=123&id=1000001
什么正则表达式都不需要了解 一个(.*) 解决全部 支持字母数字甚至汉字(编码)
/abc-1-2.htm
/分类123/1.htm
/china-shanghai/1.htm
/%C9%CF%BA%A3/1.htm

--------

如今用iis8.5 之前的ISAPI_Rewrite 不能用了 需要改url重写
csdn上看有人说 可以导入代码 上面的ISAPI_Rewrite 代码导入 按别人说的加^$

<rules>
<rule name="已导入的规则 1">
<match url="^detail_(.*)_(.*).html$" ignoreCase="true" />
<action type="Rewrite" url="detail.asp\?catid={R:1}\&id={R:2}" appendQueryString="false" />
</rule>

测试结果404
/detail_2_1.html
看日志是
/detail_2_1.html ?catid=123&id=1000001
也就是只能识别参数,找不到源文件.

完全看不懂原因,继续找别人写的。

--------

csdn又找了个例子
<match url="^t-(\d+)$" ignoreCase="false" />
<action type="Rewrite" url="/company/third.asp?thirdid={R:1}" />

测试 /t-1 页面通过 好现象 在这个基础上改吧

--------

改成

<match url="^t-(\d+)-(\d+)+.htm$" ignoreCase="false" />
<action type="Rewrite" url="/detail.asp?catid={R:1}&id={R:2}" />

ok 实现了 t-2-1.htm这样的纯数字参数的转换 基本完成预期

--------

但有些url是类似 t-abc-1.htm格式 也就是带有字母 \w就可以了 \w包含\d吧 简单

<match url="^t-(\w+)-(\d+)+.htm$" ignoreCase="false" />
<action type="Rewrite" url="/detail.asp?catid={R:1}&id={R:2}" />

--------
有些url是类似 t-%C9%CF%BA%A3-1.htm 也就是带有汉字编码的 带百分号的 用字母不行 我用 非换行和非中划线 这个规则测试好像可以 但这个不知道有没有安全问题

<match url="^t-([^-\n]+)-(\d+)+.htm$" ignoreCase="false" />
<action type="Rewrite" url="/detail.asp?catid={R:1}&id={R:2}" />
--------


有些url是类似 /t/123/china-shanghai.htm 也就是有参数是类似域名的格式 用 非换行非小数点 测试可以

<match url="^t\/(\d+)\/([^.\n]+)+.htm$" ignoreCase="false" />
<action type="Rewrite" url="/detail.asp?catid={R:1}&id={R:2}" />

--------

感觉上面两个 非中划线 非小数点 太笼统 再改进成 a-zA-Z0-9 外加-_ 通过 也就是字母数字加中划线下划线

<match url="^t\/(\d+)\/([-a-zA-Z0-9_]+)+.htm$" ignoreCase="false" />

按照这个思路 把汉字url也修改为 \w\% 通过

<match url="^t-(\d+)-([\w\%]+)+.htm$" ignoreCase="false" />

--------

至此,全部伪静态文件格式都能转换了.

数字参数 [\d]
字母参数 [\w]
英文参数 [-a-zA-Z0-9_] (字母数字加中划线下划线) 用[-\w_]也一样吧?
中文参数 [\w\%] (编码后为字母数字加%)

不知道这样写 有没有问题 因为之前的(.*) 经常有人拿注入代码测试的.

有没有更好的写法 欢迎指点





...全文
134 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,327

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 IIS
社区管理员
  • IIS
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧