Laravel通过localhost访问路由返回404,但php artisan serve正常
Laravel在XAMPP下部分路由404问题解决办法
问题场景
Laravel版本11.42.1,使用XAMPP启动Apache和MySQL后,通过localhost访问项目时出现以下异常:
- 点击首页(/)的Login链接访问/login时返回404,但手动在浏览器输入/login可正常访问
- 访问/home路由直接返回404
- 但使用
php artisan serve启动内置服务器时,所有路由功能均正常
核心原因
Apache未启用URL重写模块(mod_rewrite),或项目目录的.htaccess配置未生效,导致Laravel的路由规则无法被Apache正确解析。
解决步骤
1. 启用Apache的mod_rewrite模块
- 打开XAMPP安装目录下的
apache/conf/httpd.conf文件 - 找到行
#LoadModule rewrite_module modules/mod_rewrite.so,删除开头的#注释符 - 保存文件后,重启XAMPP的Apache服务
2. 配置Apache允许.htaccess生效
- 在
httpd.conf中找到对应项目目录的<Directory>配置块(如果项目放在XAMPP的htdocs下,找到<Directory "你的XAMPP路径/htdocs">) - 将配置中的
AllowOverride None修改为AllowOverride All - 示例配置(针对Laravel项目的public目录):
<Directory "D:/xampp/htdocs/your-laravel-project/public"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> - 保存文件后重启Apache
3. 验证public目录下的.htaccess文件
- 检查Laravel项目的
public目录是否存在.htaccess文件,默认内容如下:<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> - 若文件缺失,手动创建并粘贴上述内容
4. 确认访问路径正确性
- 确保访问路径指向项目的
public目录,比如localhost/your-project/public - 可选:配置Apache虚拟主机,将项目public目录设为根目录,简化访问路径
补充说明
php artisan serve正常是因为Laravel内置的开发服务器已经集成了URL重写规则,无需依赖Apache的mod_rewrite模块。
内容的提问来源于stack exchange,提问作者SIGMAF0
相关产品推荐
相关产品推荐

