You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS URL Rewrite移除.html后缀后出现404错误求助

问题原因

你的URL重写规则方向搞反了。当前规则会把/pages/service.html的请求内部重写到/pages/service,但服务器上并没有service这个实际存在的文件/资源,因此返回404错误。

解决方案

根据你的实际需求,分两种场景给出配置:

场景1:访问不带.html的URL时,内部加载对应.html文件(地址栏不变)

适合希望用户看到简洁URL,但实际加载原有.html文件的场景:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Rewrite to HTML" stopProcessing="true">
                    <!-- 匹配pages下不带.html的路径 -->
                    <match url="^pages/(.*)$" />
                    <!-- 排除实际存在的文件/目录,避免重写已有的资源 -->
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <!-- 避免匹配带.html的路径,防止循环重写 -->
                        <add input="{REQUEST_URI}" pattern="\.html$" negate="true" />
                    </conditions>
                    <!-- 内部重写到对应的.html文件 -->
                    <action type="Rewrite" url="/pages/{R:1}.html" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

场景2:访问带.html的URL时,跳转到不带.html的URL(地址栏更新,SEO友好)

适合希望统一URL格式,让搜索引擎收录简洁地址的场景,需要同时配置重定向和内部重写规则:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <!-- 第一步:将带.html的URL重定向到简洁URL -->
                <rule name="Redirect HTML to Clean URL" stopProcessing="true">
                    <match url="^pages/(.*)\.html$" />
                    <conditions>
                        <add input="{REQUEST_METHOD}" pattern="GET" />
                        <add input="{QUERY_STRING}" pattern="^$" />
                    </conditions>
                    <!-- 301永久重定向,利于SEO -->
                    <action type="Redirect" url="/pages/{R:1}" redirectType="Permanent" />
                </rule>
                <!-- 第二步:让简洁URL能加载对应的.html文件 -->
                <rule name="Rewrite to HTML" stopProcessing="true">
                    <match url="^pages/(.*)$" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_URI}" pattern="\.html$" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/pages/{R:1}.html" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
额外检查点
  • 确认IIS已安装URL Rewrite模块,未安装需先添加该模块。
  • 检查pages目录下的service.html文件路径、权限是否正常。
  • 测试前清空浏览器缓存,避免旧缓存干扰结果。

内容的提问来源于stack exchange,提问作者JustOneM0ment

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:02:34