IIS 10 Rewrite Rule末尾多斜杠及子目录重定向问题求助
IIS 10 重定向规则修复方案
问题原因分析
1. 多余末尾斜杠
规则顺序错误:原配置先执行「添加末尾斜杠」规则且设置了stopProcessing="true",导致访问/oldfolder时,先被强制添加斜杠变为/oldfolder/,随后重定向规则捕获到oldfolder(.*)中的R:2为/,拼接后出现newfolder//。
2. 子目录请求未被捕获
部分子目录请求被「添加末尾斜杠」规则拦截(因stopProcessing="true"),无法进入重定向规则;同时原重定向规则的匹配逻辑未覆盖带斜杠的子目录场景,导致部分请求未触发重定向。
修复后的Web.config配置
<rewrite> <rules> <!-- 优先处理oldfolder到newfolder的重定向 --> <rule name="Redirect oldfolder to newfolder" stopProcessing="false"> <match url="^oldfolder(/?.*)$" ignoreCase="true" /> <action type="Redirect" url="https://www.example.com/newfolder{R:1}" redirectType="Permanent" appendQueryString="true" /> </rule> <!-- 统一为非文件/目录的请求添加末尾斜杠 --> <rule name="Add trailing slash" stopProcessing="true"> <match url="(.*[^/])$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_METHOD}" matchType="Pattern" negate="true" ignoreCase="true" pattern="POST" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Redirect" redirectType="Permanent" url="{R:1}/" /> </rule> </rules> </rewrite>
关键修改说明
- 调整规则顺序:将重定向规则放在最前面,确保所有
oldfolder相关请求先被转至newfolder,再由后续规则统一处理末尾斜杠,从根源避免双斜杠。 - 优化重定向规则匹配模式:使用
^oldfolder(/?.*)$,覆盖所有以oldfolder开头的请求(带/不带斜杠、包含子目录):- 匹配
oldfolder(无斜杠):R:1为空,重定向到newfolder - 匹配
oldfolder/(带斜杠):R:1为/,重定向到newfolder/ - 匹配
oldfolder/subfolder或oldfolder/subfolder/:R:1为/subfolder或/subfolder/,重定向到对应newfolder路径
- 匹配
- 修改重定向规则的
stopProcessing:设为false,让重定向后的请求继续执行「添加末尾斜杠」规则,确保所有目标URL末尾带斜杠。 - 保留原斜杠规则条件:仅对非文件、非目录、非POST请求添加斜杠,避免与实际文件/目录的访问冲突。
测试验证
- 访问
https://www.example.com/oldfolder→ 先重定向到https://www.example.com/newfolder,再补斜杠为https://www.example.com/newfolder/(无多余斜杠) - 访问
https://www.example.com/oldfolder/subfolder→ 重定向到https://www.example.com/newfolder/subfolder/ - 访问
https://www.example.com/oldfolder/subfolder/→ 直接重定向到https://www.example.com/newfolder/subfolder/
内容的提问来源于stack exchange,提问作者rwkiii
相关产品推荐
相关产品推荐

