Apache URL重写实现静态页面路由,核心是通过.htaccess将伪静态请求(如/about.html)转发至PHP统一处理,同时用!-f和!-d条件放行真实静态资源;再按需匹配.html后缀、无后缀语义路径或通用入口;需启用mod_rewrite、AllowOverride All,并确保.htaccess格式正确;PHP端应解析REQUEST_URI并妥善处理404。

Apache URL 重写实现静态页面路由,核心是用 .htaccess 把“看起来像静态页面”的请求(比如 /about.html、/products/widget)转给 PHP 脚本统一处理,同时确保真实存在的静态文件(CSS、JS、图片等)不受影响。
先放行真实静态资源
这是关键前提——不能让重写规则干扰已有的 .css、.js、.png 等文件。Apache 通过判断路径是否对应真实文件或目录来实现:
-
RewriteCond %{REQUEST_FILENAME} !-f:请求路径不是真实文件(如/style.css存在,这条条件不满足,跳过重写) -
RewriteCond %{REQUEST_FILENAME} !-d:请求路径不是真实目录(如/images/存在,也不触发重写)
匹配并重写伪静态路径
满足上面两个条件后,再定义你要捕获的“静态风格”URL格式。常见写法有几种:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 匹配带
.html后缀的页面:RewriteRule ^(.+)\.html$ article.php?slug=$1 [QSA,L](访问/contact.html→article.php?slug=contact) - 匹配无后缀的语义化路径:
RewriteRule ^([a-zA-Z0-9_-]+)/?$ article.php?slug=$1 [QSA,L](访问/services或/blog-post-2024都能捕获) - 更宽松的通用入口(适合单页或多级结构):
RewriteRule ^(.*)$ index.php [QSA,L],然后由 PHP 解析$_SERVER['REQUEST_URI']或PATH_INFO
注意服务器配置基础
规则生效需要底层支持:
- 确认
mod_rewrite已启用(XAMPP 默认开;Linux 上可运行a2enmod rewrite && systemctl restart apache2) - 确保站点允许
.htaccess覆盖,即 Apache 主配置中对应目录的AllowOverride设为All或至少包含FileInfo -
.htaccess文件必须保存为 UTF-8 无 BOM 格式,且文件名严格为.htaccess(开头带点)
PHP 端配合解析
重写只是第一步,PHP 脚本要能拿到原始路径并响应正确内容:
- 如果用了
[QSA],查询参数会自动保留(/page?id=5&ref=share→article.php?slug=page&id=5&ref=share) - 建议在
article.php开头用parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)获取原始路径,避免依赖$_GET['slug']可能被篡改 - 对不存在的 slug 做 404 处理(
http_response_code(404)),别返回空白页


















