一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Apache URL 重写隐藏 index.php 如何做

时间:2026-08-06 14:02:49 编辑:袖梨 来源:一聚教程网

Apache隐藏index.php需正确配置:1.启用mod_rewrite模块;2.设置AllowOverride All放开.htaccess权限;3.将含RewriteEngine On等规则的.htaccess置于public目录;url_model=2仅影响URL生成,不决定重写生效。

Apache 隐藏 index.php 不是 ThinkPHP 或其他框架“关掉”就能生效的功能,而是必须由 Apache 正确转发所有非静态请求到 index.php 入口文件。配置不到位,页面直接 404 或报 “No input file specified”。核心就三件事:启用模块、放开权限、写对规则。

确认并启用 mod_rewrite 模块

这是前提,没它整个重写流程根本走不起来:

  1. 打开 Apache 的 httpd.conf(路径通常为 /etc/httpd/conf/httpd.confC:Apache24confhttpd.conf
  2. 查找 #LoadModule rewrite_module modules/mod_rewrite.so,删掉开头的 # 取消注释
  3. 保存后重启 Apache:sudo systemctl restart httpd(Linux)或通过服务管理器重启(Windows)
  4. 可访问 phpinfo() 页面,搜索 “Loaded Modules”,确认 mod_rewrite 在列表中

设置 AllowOverride All

.htaccess 文件能否生效,全看这个配置:

  1. httpd.conf 或虚拟主机配置(如 vhost.conf)中,找到 <Directory> 块,通常是 根目录或 public/ 目录
  2. 把里面的 AllowOverride None 改成 AllowOverride All
  3. 如果用了多个 <Directory>,每个都要检查并修改,不能漏
  4. 确保该目录下用户(如 www-dataapache)有读取 .htaccess 的权限

放置正确的 .htaccess 规则

文件必须放在 index.php 所在目录(通常是 public/),内容推荐用这个兼容性好、适配 TP6/TP8 的版本:

<IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?s=$1 [QSA,L]</IfModule>

说明:

  1. !-d!-f 确保真实存在的文件(如 css/app.css)和目录不被重写,避免静态资源 404
  2. s=$1 把原始路径传给框架的 $_GET['s'],ThinkPHP 默认识别这个参数
  3. 不用 PATH_INFO 方式(如 index.php/$1),避开 cgi.fix_pathinfoAcceptPathInfo 的兼容性坑
  4. Windows 下创建 .htaccess 可先新建文本文件,另存为时选择“所有文件”,文件名填 .htaccess(注意开头的点)

检查 ThinkPHP 的 URL_MODEL(可选但建议)

虽然现代 ThinkPHP(6+)已弱化该配置,但若项目仍沿用旧版或自定义路由,建议确认:

  1. config/app.phpconf.php 中,'url_model' => 2(表示重写模式)
  2. 实际起作用的是 Apache 规则,url_model 只影响框架内部 URL 生成逻辑,不影响重写本身

热门栏目