ISAPI_Rewrite伪静态 升级到 IIS8.5+url重写 的过程 理论完工
原来用 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\%] (编码后为字母数字加%)
不知道这样写 有没有问题 因为之前的(.*) 经常有人拿注入代码测试的.
有没有更好的写法 欢迎指点