IIS ASP.NET URL重写规则,如何正确获取到当前请求的路径,因为我的网站程序要适用主网站和网站应用程序两种模式,如果直接用 / 会定位到主网站的根目录,这样网站应用程序就不能正确定位了,然后改用 ./ 就能很好的兼容这两种模式,直接定位到当前提求位置,~/ 测试发现不管用。
<rule name="WuXing">
<match url="^wuxing/(.*?).html" />
<action type="Rewrite" url="./WuXing.aspx?did={R:1}" />
</rule>
1、<action type="Rewrite" url="WuXing.aspx?did={R:1}" />
采用相对路径(无前缀),以当前请求的 URL 路径为基准。
例如:若请求是http://domain/abc/wuxing/123.html,会重写到http://domain/abc/WuXing.aspx?did=123(与wuxing目录同级)。
依赖当前请求的路径层级,若 URL 结构复杂可能出错。
2、<action type="Rewrite" url="./WuXing.aspx?did={R:1}" />
用./明确表示当前目录,逻辑与第一种完全一致,只是更直观地强调 “从当前目录查找”。
例如:同上,请求/abc/wuxing/123.html会重写到/abc/wuxing/WuXing.aspx?did=123(在wuxing目录内查找)。
3、<action type="Rewrite" url="/WuXing.aspx?did={R:1}" />
用/表示服务器根目录(站点级绝对路径),无视当前请求路径。
例如:无论请求是/abc/wuxing/123.html还是/x/y/wuxing/456.html,都会重写到http://domain/WuXing.aspx?did=xxx(直接从网站根目录查找)。
适合固定在根目录的文件,但需确保WuXing.aspx确实在服务器根目录。
4、<action type="Rewrite" url="~/WuXing.aspx?did={R:1}" />
用~表示应用程序根目录(相对于部署的应用程序,而非服务器根目录)。
例如:若应用部署在http://domain/app/,则无论请求是/app/abc/wuxing/123.html,都会重写到http://domain/app/WuXing.aspx?did=123。
最推荐的写法,尤其适合多应用部署的服务器,路径解析更稳定。
优先使用~/(应用根目录),适配性最强;
/适合根目录固定文件;
相对路径(无前缀或./)仅适合简单目录结构,需注意路径层级。