apache隐藏php后缀本质是通过mod_rewrite将无后缀请求(如/about)内部重写为对应.php文件执行,浏览器地址栏保持干净;需启用rewrite模块、设置allowoverride all,并在.htaccess中配置条件重写规则及可选的.php访问拦截。

Linux 中用 Apache 隐藏 PHP 后缀,本质是让访问 /about 自动匹配并执行 /about.php,而浏览器地址栏不显示 .php。这不是“删掉后缀”,而是靠 URL 重写把无后缀请求转发给对应 PHP 文件——用户看到干净路径,服务器仍运行 PHP 脚本。
确认 mod_rewrite 已启用
这是前提。没开启 rewrite 模块,.htaccess 里的规则全无效。
- 运行命令:
sudo a2enmod rewrite - 重启服务:
sudo systemctl restart apache2 - 验证是否加载成功:执行
apache2ctl -M | grep rewrite,输出含rewrite_module (shared)即可
设置目录允许重写(AllowOverride)
Apache 默认禁止 .htaccess 覆盖配置,必须显式放行。
- 编辑站点配置文件,如
/etc/apache2/sites-available/000-default.conf或你的虚拟主机配置 - 在对应
<directory></directory>块内,确保有:AllowOverride All - 如果使用系统默认的
/var/www/html,检查/etc/apache2/apache2.conf中该路径的<directory></directory>段是否已设为All - 改完重启 Apache 生效
编写 .htaccess 实现无后缀访问
在网站根目录(如 /var/www/html)创建或编辑 .htaccess,内容如下:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ $1.php [L]
</ifmodule>
说明:
-
RewriteCond %{REQUEST_FILENAME} !-d:请求路径不是真实存在的目录 -
RewriteCond %{REQUEST_FILENAME} !-f:请求路径不是真实存在的文件(避免干扰图片、CSS 等静态资源) -
RewriteRule ^(.+)$ $1.php [L]:将任意非文件/非目录的请求,自动补上.php后执行([L]表示终止后续规则)
例如访问 https://example.com/contact,Apache 会尝试执行 /contact.php(只要该文件存在)。
补充:防止直接暴露 .php 访问(可选但推荐)
只隐藏后缀还不够——用户仍可手动输入 /about.php 访问。加一条规则返回 404 或跳转,更安全:
RewriteCond %{THE_REQUEST} \s/([^\s]+)\.php[\s?] [NC]
RewriteRule ^(.*)$ - [R=404,L]
这段放在上面规则之后,作用是:当原始 HTTP 请求中明确包含 .php(比如用户直输网址),就返回 404 错误,不执行脚本。
整个过程不依赖 Alias,也不需要修改 PHP 代码或链接生成逻辑——只要页面内链接写成 /about 而不是 /about.php,就能自然生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











