请求编写IIS Rewrite规则:URL不变指向/pub/src/目录文件
IIS Rewrite规则修正方案
原规则存在两个核心问题:
- 条件
{REQUEST_FILENAME}匹配的是根目录下的物理文件,而实际文件存放在/pub/src/,导致带子路径的ASP请求(如/login/index.asp)因根目录无对应文件而不触发规则,返回404 - 未匹配根路径(空URL)的情况,默认文档无法生效
修正后的完整规则
<rule name="RewriteRootToSrc" stopProcessing="true"> <match url="^$" /> <action type="Rewrite" url="/pub/src/index.asp" /> </rule> <rule name="RewriteAllASPFiles" stopProcessing="true"> <match url="^(.+\.asp)$" /> <conditions> <!-- 检查/pub/src/下的目标文件是否存在,避免无效重写 --> <add input="{DOCUMENT_ROOT}/pub/src/{R:1}" matchType="IsFile" /> </conditions> <action type="Rewrite" url="/pub/src/{R:1}" /> </rule>
规则说明
- RewriteRootToSrc规则:专门匹配空URL(即根域名直接访问),直接重写到
/pub/src/index.asp,满足默认文档的需求 - RewriteAllASPFiles规则:
- 保留原正则
^(.+\.asp)$,可以捕获所有带子路径的ASP文件请求 - 条件修改为检查
/pub/src/下的目标文件是否存在,确保只对真实存在的文件执行重写 - 重写动作指向
/pub/src/{R:1},{R:1}会代入捕获到的完整路径+文件名,保证子路径请求正确映射
- 保留原正则
可选:合并为单一规则
如果希望用一条规则覆盖所有场景,可使用以下配置:
<rule name="RewriteAllToSrc" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> <!-- 仅对根路径或ASP文件请求生效 --> <add input="{URL}" pattern="^$|.+\.asp$" /> </conditions> <action type="Rewrite" url="/pub/src/{R:1}{R:1=/index.asp}" /> </rule>
合并规则通过条件排除真实存在的文件和目录,仅对根路径或ASP请求生效;重写时若捕获到的路径为空(根访问),自动追加/index.asp,否则直接使用原路径映射到/pub/src/目录。
内容的提问来源于stack exchange,提问作者Nick Petrie
相关产品推荐
相关产品推荐

