旧版静态HTML页面迁移到动态系统时,URL重写的核心目标是实现无缝过渡:用户和搜索引擎访问原/about.html仍正常打开内容,浏览器地址栏不变,背后由page.php?slug=about等动态脚本处理。需启用mod_rewrite模块、设置AllowOverride All,并在.htaccess中用RewriteCond和RewriteRule匹配.html路径映射至动态处理器,同时动态脚本需复现原HTML的SEO元素,真实存在的HTML文件可自动跳过重写。

旧版静态 HTML 页面迁移到动态系统时,URL 重写的核心目标是:用户和搜索引擎访问原来的 /about.html,仍能正常打开内容,但背后实际由 PHP 或其他动态脚本(如 /page.php?slug=about)处理。整个过程对访客完全透明,不出现 404,也不改变浏览器地址栏——这就是“无缝过渡”。
确保 Apache 已启用 mod_rewrite
这是前提。检查方法有两种:
- 运行
apachectl -M | grep rewrite,看到rewrite_module表示已启用 - 或在
httpd.conf中确认存在且未被注释的行:LoadModule rewrite_module modules/mod_rewrite.so - 同时确保站点配置或
.htaccess所在目录允许重写,即包含AllowOverride All(若用 .htaccess)
在 .htaccess 中设置匹配规则
把请求 /xxx.html 映射到动态处理器,例如统一交给 index.php 处理:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\.html$ index.php?slug=$1 [L,QSA]
说明:
立即学习“前端免费学习笔记(深入)”;
-
RewriteCond两行确保只重写真实不存在的 .html 文件(避免覆盖真实存在的资源,如style.css或图片) -
RewriteRule匹配以.html结尾的路径,提取前缀作为 slug 参数 -
[L]表示终止后续规则;[QSA]保留原有查询参数(如有)
动态脚本中兼容旧 URL 逻辑
比如 index.php 需识别 slug=about 并返回原 about.html 的等效内容:
- 可从数据库查
about对应的页面记录 - 也可做映射表:
['about' => 'about_old_content', 'contact' => 'contact_v1'] - 关键是要复现原 HTML 的标题、正文、meta 标签等,保持 SEO 元素一致
保留部分真实 HTML 文件(可选但推荐)
如果某些页面暂时不改动态逻辑,又不想中断访问,可直接保留它们,并靠前面的 RewriteCond 自动跳过重写——Apache 会优先服务真实文件,只有找不到时才走动态逻辑。这样新旧混合过渡更稳妥。



















