XAMPP 默认不认 .htaccess,必须同时启用 mod_rewrite 模块并设置对应目录的 AllowOverride All;.htaccess 需置于 public/ 目录下,且其父目录的 <Directory> 块中须包含 Options +FollowSymLinks -Multiviews 和 AllowOverride All。

XAMPP 默认不认 .htaccess,直接放文件没用——必须同时开启 mod_rewrite 模块 + 把对应目录的 AllowOverride 改成 All。
确认 mod_rewrite 已启用
打开 XAMPP\apache\conf\httpd.conf,搜索:LoadModule rewrite_module modules/mod_rewrite.so。如果前面有 #,删掉;如果整行被注释或压根不存在,就手动加一行(独占一行,不能拼在别的行后面)。改完保存,重启 Apache。
验证方式:新建一个 phpinfo.php,内容为 <?php phpinfo(); ?>,浏览器访问,Ctrl+F 搜 mod_rewrite,出现在 “Loaded Modules” 列表里才算成功。
.htaccess 必须放在 public/ 目录下
ThinkPHP 6+ 的入口已统一移到 public/,.htaccess 如果放在项目根目录(比如 htdocs/myapp/),Apache 根本不会去读它——因为请求先到达的是 public/ 子目录,而该目录的 AllowOverride 可能仍是 None。
立即学习“PHP免费学习笔记(深入)”;
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
正确做法:
- 把
.htaccess放进htdocs/myapp/public/ - 确保
httpd.conf中针对public/所在路径的<Directory>块里,AllowOverride是All - Windows 下建
.htaccess文件容易失败,推荐用命令行:cd /d htdocs\myapp\public && echo RewriteEngine On > .htaccess,再追加规则
规则里用 index.php/$1 还是 index.php?path=$1?
取决于 ThinkPHP 版本和路由配置:
- TP5.x 默认走
PATH_INFO,推荐用RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] - TP6+ 默认用
s=参数接收路由,应改用RewriteRule ^(.*)$ index.php?s=$1 [QSA,L] - 如果用
index.php/$1却报 404,大概率是 PHP 没开启cgi.fix_pathinfo=1(XAMPP 默认关着);此时强行开可能有安全风险,不如换s=方式
常见 403 错误不是权限问题,而是 FollowSymLinks 缺失
很多 XAMPP 新版默认禁用了符号链接支持,导致 .htaccess 里的 Options +FollowSymLinks 触发 403。解决方法是在对应 <Directory> 块里显式加上:
Options +FollowSymLinks -Multiviews
注意:-Multiviews 要带上,否则可能干扰路由匹配;FollowSymLinks 和 AllowOverride All 必须在同一 <Directory> 块内生效,不能只改全局配置却漏掉子目录。
伪静态最脆弱的一环从来不是规则写得对不对,而是 Apache 配置里那几行看似无关的开关——它们全得对上号,.htaccess 才真正有机会被执行。


















