Chrome/IE使用主机名访问IIS部署PHP站点特定目录出现404错误问题问询
问题解决方案
优先推荐的低成本方案(无需全站替换绝对路径)
- 配置HTML
<base>标签统一相对路径基准
在所有页面的<head>标签最顶部加入base标签,动态生成站点根路径即可,示例PHP代码:
加了这个标签之后,页面内所有相对路径的资源、链接都会统一以这个base路径为基准拼接,彻底解决不同浏览器的解析差异问题,不需要修改原有相对路径代码。<head> <?php $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $basePath = $protocol . $_SERVER['HTTP_HOST'] . '/'; ?> <base href="<?php echo $basePath; ?>"> <!-- 其他head内容 --> </head> - 替换现有相对路径为根相对路径
如果不想加base标签,可以把所有资源引入的相对路径改成以/开头的根相对路径,比如把../css/main.css改成/css/main.css,这种路径是直接基于站点根目录解析,所有浏览器解析逻辑完全一致,改造成本远低于全写带域名的绝对路径。
需同步排查的服务端配置问题
你提到有ERR_CONNECTION_RESET报错,这个不是单纯的路径解析问题,需要同步排查IIS配置:
- 检查IIS站点绑定配置:确认主机名对应的站点绑定和localhost的绑定是否一致,端口、协议(HTTP/HTTPS)、证书配置是否完全相同,Chrome和IE对HTTPS证书错误、端口不匹配的容错率低于Firefox/Edge,很容易触发连接重置。
- 检查IIS请求过滤规则:确认是否有针对特定User-Agent的过滤规则,Chrome和IE的UA可能触发了拦截规则导致请求被重置。
- 对比不同浏览器的请求路径:打开Chrome的F12网络面板,查看404资源的实际请求URL,和Edge正常请求的URL做对比,确认路径拼接的差异点,定位是相对路径基准的问题还是服务端路由的问题。
关于是否需要替换全站绝对路径
不需要全站替换带域名的绝对路径,上述的base标签或者根相对路径方案已经可以解决路径解析差异问题,而且适配性更强,同时支持localhost、主机名、域名等多种访问方式,不需要根据访问环境修改代码。
内容的提问来源于stack exchange,提问作者Nana
相关产品推荐
相关产品推荐

