You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 4 RESTful API在PHP内置服务器正常,XAMPP路由全报404求助

解决Symfony 4 REST API在XAMPP下返回404的问题

嘿,刚接触Symfony遇到这种情况太正常了——毕竟内置服务器是Symfony自己接管路由,而Apache需要额外配置才能正确转发请求到Symfony的前端控制器。你的猜测没错,这大概率和.htaccess以及Apache的配置有关,我给你一步步梳理解决方案:

1. 先确认Apache的mod_rewrite模块是否开启

XAMPP默认可能没开启这个关键模块,它是实现URL重写的核心:

  • 打开XAMPP控制面板,点击Apache的「Config」按钮,选择httpd.conf
  • 在文件里搜索LoadModule rewrite_module,找到这一行:
    #LoadModule rewrite_module modules/mod_rewrite.so
    
  • 把前面的#删掉,保存文件后重启Apache

2. 检查public目录下的.htaccess文件

Symfony 4的路由重写规则默认放在public/.htaccess里,你要确保这个文件存在,且内容正确(默认的Symfony项目会自带这个文件,如果你不小心删了,可以重新创建,内容如下):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]

    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

3. 配置Apache允许目录使用.htaccess规则

如果你的项目放在XAMPP的htdocs子目录(比如htdocs/symfony-api),需要让Apache允许该目录的.htaccess生效:

  • 打开httpd.conf,找到对应项目public目录的<Directory>块(如果没有就自己加):
    <Directory "C:/xampp/htdocs/symfony-api/public">
        AllowOverride All
        Require all granted
    </Directory>
    
  • 这里的路径要换成你自己的项目public目录绝对路径,保存后重启Apache

4. (推荐)配置虚拟主机指向public目录

这是更规范的做法,能避免子目录带来的路径问题:

  • 打开XAMPP的Apache配置,选择httpd-vhosts.conf
  • 添加一个虚拟主机配置:
    <VirtualHost *:80>
        ServerName symfony-api.local
        DocumentRoot "C:/xampp/htdocs/symfony-api/public"
        <Directory "C:/xampp/htdocs/symfony-api/public">
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    
  • 打开你的系统hosts文件(Windows在C:\Windows\System32\drivers\etc\hosts,Mac/Linux在/etc/hosts),添加一行:
    127.0.0.1 symfony-api.local
    
  • 重启Apache,之后直接访问http://symfony-api.local/your-route就能正常访问了

快速测试方法

如果上面的配置做完还是有问题,可以先直接访问http://localhost/symfony-api/public/index.php/your-route:

  • 如果这个地址能正常返回数据,说明你的Symfony路由本身没问题,只是Apache的重写规则没生效,再回头检查前面的步骤
  • 如果这个地址也返回404,那可能是你的Symfony路由配置有问题,比如路由注解没写对,或者没清除缓存(可以运行php bin/console cache:clear清除缓存)

内容的提问来源于stack exchange,提问作者Félix Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:30:22