必须把网站根目录设为public子目录并启用mod_rewrite模块,否则请求无法进入Laravel框架导致404;需修改httpd.conf启用rewrite模块、在正确<Directory>块中配置AllowOverride All和Require all granted,并确保public/.htaccess存在且规则正确。

必须把网站根目录设为 public 子目录,再配 .htaccess,否则 404 是必然的,不是 Laravel 路由写错了,是请求根本没进框架。
Apache 必须启用 mod_rewrite 模块
不启用这个模块,RewriteEngine On 就是无效的空指令。打开 httpd.conf(PHPStudy 中通常在 C:\phpstudy_pro\Extensions\Apache2.4.39\conf\httpd.conf),找到这行:
#LoadModule rewrite_module modules/mod_rewrite.so
去掉开头的 #,保存。如果整行不存在,就手动加一行:
LoadModule rewrite_module modules/mod_rewrite.so
改完不重启 Apache,配置永远不生效。
AllowOverride All 必须设在正确的 区块里
PHPStudy 默认的虚拟主机配置往往指向 C:/phpstudy_pro/WWW 或你自定义的项目路径。你要找到对应这个路径的 <Directory> 块,例如:
<Directory "C:/phpstudy_pro/WWW">
在里面确认三点:
-
AllowOverride All(不是None) -
Options FollowSymLinks(或Indexes FollowSymLinks) -
Require all granted(Apache 2.4+ 必须有,缺了会 403)
漏掉任一条件,.htaccess 文件都会被忽略。
public 目录下的 .htaccess 规则要精简且兼容 Laravel 6
Laravel 6 的 public/.htaccess 默认已自带规则,但 PHPStudy 环境下常因路径或模块问题失效。建议直接用这个最小可用版本(放在 public 目录下,不是项目根目录):
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
<pre class='brush:php;toolbar:false;'>RewriteEngine On
# 处理 Authorization header(API 认证需要)
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# 重写到 index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]</IfModule>
注意几个关键点:
- 文件名必须是
.htaccess,Windows 下用记事本另存为时选“所有文件”类型,避免变成.htaccess.txt - 这个文件必须放在
public目录下,不是项目根目录 -
RewriteRule ^(.*)$ index.php [L]不能写成index.php/$1,Laravel 6 的路由解析器不认这种路径格式 - 如果用了子目录部署(如
http://localhost/myapp/),需额外加RewriteBase /myapp/
为什么访问还是 404?先检查这三件事
绝大多数失败不是规则写错,而是基础环节断了:
- 浏览器地址栏 URL 是不是直接指向
public目录?比如http://localhost/myproject/public/—— 这是错的,应该通过虚拟主机把根映射到public,让 URL 是http://localhost/或http://myapp.test/ - PHPStudy 的「网站」功能里,是否把「根目录」设置成了你的项目
public文件夹路径?不是项目根目录,也不是public的上一级 - 执行过
php artisan config:clear和php artisan route:clear吗?缓存路由有时会让新规则看起来没反应
最易被忽略的一点:PHPStudy 的 Apache 版本若低于 2.4.25,Require all granted 可能不识别,得换回旧式写法 Order allow,deny + Allow from all,但更稳妥的做法是升级 PHPStudy 或换用高版本 Apache。


















