apache隐藏php/html后缀需三步:启用mod_rewrite模块并验证运行(如apache2ctl -m | grep rewrite)、在directory中设allowoverride all和options followsymlinks、用.htaccess中rewritecond !-f和!-d配合rewriterule $1.php实现内部映射,并可加301重定向拦截直接访问.php。

Apache 中隐藏 PHP 或 HTML 后缀,核心是用 mod_rewrite 把无后缀请求(比如 /about)内部映射到对应的真实文件(/about.php 或 /about.html),浏览器地址栏不变,URL 更简洁、更专业,也间接减少暴露技术栈的风险。
确认 rewrite 模块已启用
没开启模块,所有重写规则都无效。不能只看配置里有没有那行,得验证它真在运行:
- Debian/Ubuntu 系统:执行
sudo a2enmod rewrite && sudo systemctl restart apache2 - CentOS/RHEL 系统:编辑
/etc/httpd/conf/httpd.conf,取消#LoadModule rewrite_module modules/mod_rewrite.so前的注释 - 验证命令:
apache2ctl -M | grep rewrite(或httpd -M | grep rewrite),输出含rewrite_module (shared)才算成功
授权 .htaccess 使用重写功能
Apache 默认禁止目录级重写,必须显式放行。找到你的站点配置(如 /etc/apache2/sites-available/000-default.conf 或虚拟主机段),在对应 <directory></directory> 块中确保有:
AllowOverride All- 建议加上
Options FollowSymLinks(部分旧版本必需) - 改完务必重启服务:
sudo systemctl restart apache2
编写 .htaccess 实现无后缀访问
在网站根目录(如 /var/www/html)创建或编辑 .htaccess,内容如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L]
说明:
-
RewriteCond %{REQUEST_FILENAME} !-f表示请求路径不是真实存在的文件 -
!-d表示也不是真实存在的目录 -
RewriteRule ^(.*)$ $1.php [L]把任意无后缀路径自动补上.php并内部执行 - 想同时支持
.html?可加一条:RewriteRule ^(.*)$ $1.html [L],但需放在 PHP 规则之后,并注意冲突逻辑
额外建议:阻止直接访问带后缀的 URL
为真正“隐藏”,可拦截对 .php 文件的直接请求,避免用户仍能通过 /about.php 访问:
RewriteCond %{THE_REQUEST} \.php[\ /?]
RewriteRule ^(.*)\.php$ /$1 [R=301,L]
这段规则会把带 .php 的请求 301 重定向到无后缀版本,既统一入口,又利于 SEO。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











