Apache实现伪静态需先启用mod_rewrite模块并设置AllowOverride All;在.htaccess中用RewriteEngine On开启引擎,通过RewriteCond排除真实文件和目录,再用RewriteRule ^(.+)$ $1.php [L,QSA]将无后缀路径如/about内部重写为/about.php,保留查询参数且不暴露扩展名。

Apache 实现伪静态、去除 PHP 或其他后缀(比如访问 /about 自动映射到 /about.php),核心是用 RewriteRule 捕获无后缀路径,并内部重定向到真实脚本,同时确保服务器能正确处理请求。这不是单纯“隐藏后缀”,而是让 Apache 主动匹配、转发,且不暴露真实扩展名。
确认 mod_rewrite 已启用并允许 .htaccess
这是前提,否则规则根本不会生效:
- 运行
sudo a2enmod rewrite启用模块 - 重启服务:
sudo systemctl restart apache2 - 编辑站点配置(如
/etc/apache2/sites-available/000-default.conf),在<Directory /var/www/html>区块内确保包含:AllowOverride All<br>Require all granted
- 重启 Apache 生效
基础无后缀重写规则(推荐方式)
在网站根目录的 .htaccess 中写入以下内容(注意开头必须有 RewriteEngine On):
RewriteEngine On<br>RewriteBase /<br><br># 排除真实存在的文件和目录(如图片、CSS、js等)<br>RewriteCond %{REQUEST_FILENAME} !-f<br>RewriteCond %{REQUEST_FILENAME} !-d<br><br># 尝试匹配 .php 文件:/about → /about.php<br>RewriteRule ^(.+)$ $1.php [L,QSA]说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
!-f和!-d防止把真实存在的style.css或uploads/目录也重写 -
^(.+)$匹配任意非空路径(不含查询参数) -
$1.php表示追加.php后缀后交给 Apache 处理(内部重定向,浏览器地址栏不变) -
[QSA]保留原始 URL 中的查询参数,例如/user?id=5→/user.php?id=5
支持多种后缀或选择性重写
如果项目中混用 .php、.html、.inc 等,可分步尝试:
RewriteCond %{REQUEST_FILENAME} !-f<br>RewriteCond %{REQUEST_FILENAME} !-d<br>RewriteRule ^(.+)$ $1.php [L,QSA]<br>RewriteCond %{REQUEST_FILENAME} !-f<br>RewriteCond %{REQUEST_FILENAME} !-d<br>RewriteRule ^(.+)$ $1.html [L,QSA]但更稳妥的做法是明确限定范围,比如只对特定目录或命名规则生效:
- 仅对以字母开头、不含点号的路径生效:
RewriteRule ^([a-zA-Z][a-zA-Z0-9]*)$ $1.php [L,QSA] - 排除 API 路径(如
/api/):RewriteCond %{REQUEST_URI} !^/api/
处理首页和 index.php 隐式跳转
用户访问 / 时,默认应加载 index.php,但若想统一为无后缀风格,需额外兼容:
- 确保 Apache 的
DirectoryIndex包含index.php(在虚拟主机配置中):DirectoryIndex index.php index.html - 若希望
/home→/home.php,而/→index.php,上面的基础规则已覆盖(因为^([^/]+)$不匹配/,但 Apache 默认行为会找index.php) - 如需强制移除
index.php出现在 URL 中,添加跳转规则:RewriteCond %{THE_REQUEST} \s/index\.php[?\s] <br>RewriteRule ^index\.php(/.*)?$ /$1 [R=301,L]

















