IIS 8.5 访问虚拟路径自动301重定向如何避免?
IIS 8.5虚拟路径访问时301重定向的原因与解决方法
原因解析
这是IIS默认的目录处理行为导致的。当访问的URL指向一个存在的虚拟/物理目录但末尾不带斜杠时,IIS会自动返回301重定向,补全末尾的斜杠。这个设计的初衷是为了保证页面内的相对路径资源(如CSS、JS、图片)能正确加载——如果URL末尾没有斜杠,浏览器会把virtualpath识别为文件名,相对路径会从域名根目录开始解析,而非目标虚拟目录下,最终导致资源加载失败。
避免方法
- 直接访问目标文件:如果你的访问目标是
index.html,直接访问https://test.domain.com/virtualpath/index.html,跳过目录级访问,自然不会触发重定向。 - 禁用目录浏览功能:
- 打开IIS管理器,定位到
virtualPath虚拟目录 - 进入目录浏览模块,点击右侧操作栏的禁用
注意:禁用后直接访问不带斜杠的virtualpath会返回403禁止访问,需配合默认文档或URL重写规则处理。
- 打开IIS管理器,定位到
- 添加URL重写规则:
可以添加一条重写规则,将不带斜杠的virtualpath直接映射到index.html,替代IIS的默认301行为:
这条规则会在服务器内部完成路径映射,不会向浏览器发送301响应。<rule name="Map VirtualPath to Index" stopProcessing="true"> <match url="^virtualpath$" /> <action type="Rewrite" url="virtualpath/index.html" /> </rule> - 修改web.config全局配置:
在站点根目录的web.config中添加以下配置,全局禁用目录自动重定向并映射到默认文档:<system.webServer> <directoryBrowse enabled="false" /> <rewrite> <rules> <rule name="No Trailing Slash Redirect" stopProcessing="true"> <match url="^(.*[^/])$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="false" /> </conditions> <action type="Rewrite" url="{R:1}/index.html" /> </rule> </rules> </rewrite> </system.webServer>
内容的提问来源于stack exchange,提问作者Valter
相关产品推荐
相关产品推荐

