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

使用.htaccess的RewriteRule出现Not Found错误的原因及解决方法

问题:使用.htaccess重写规则后,访问.html页面提示“Not Found”

问题描述

我尝试通过.htaccess文件配置规则,让HTML文件能运行PHP代码,使用的规则如下:

RewriteEngine on 
RewriteRule ^(.*)\.html $1\.php

但访问test.html时收到错误:

Not Found
请求的URL /test.html在服务器上未找到。

补充说明:本地主机和虚拟主机均测试过,.htaccess文件与HTML文件都放在文档根目录;首页index.html也返回相同的“Not found”错误。本地路径为D:/Server/vhosts/another,移除.htaccess文件后虚拟主机运行正常,排除主机配置问题。

原因分析

  • 你当前的规则逻辑是将所有.html请求重定向到对应的.php文件,但服务器上实际只有.html文件,不存在对应的.php资源,因此返回404错误。
  • 规则中$1\.php的反斜杠是多余的转义,不过这不是导致404的直接原因。

解决方法

你需求的核心是让.html文件解析PHP代码,而非将.html请求转向.php文件,因此需调整配置方式:

方法1:直接让服务器解析.html文件中的PHP代码

在.htaccess中添加以下规则,让Apache把.html/.htm文件当作PHP文件处理:

AddType application/x-httpd-php .html .htm

如果服务器使用PHP-FPM环境,可能需要改用以下配置:

<FilesMatch "\.(html|htm)$">
    SetHandler application/x-httpd-php
</FilesMatch>

方法2:若需隐藏.php后缀(确保存在对应.php文件)

如果你确实需要通过.html访问.php文件(即服务器上有test.php,想通过test.html访问),可调整规则,先检查目标.php文件是否存在,避免无意义跳转:

RewriteEngine On
# 仅当请求的.html文件不存在,且对应的.php文件存在时才重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)\.html$ $1.php [L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:16:02