Symfony 4在GoDaddy虚拟主机中非根路由返回404问题求助
解决GoDaddy虚拟主机上Symfony 4非根路由404的问题
嘿,我之前在GoDaddy虚拟主机上折腾Symfony时也碰到过一模一样的问题!这大概率是URL重写规则没配置到位导致的——毕竟Symfony需要把所有请求都转发到public/index.php,而GoDaddy的Apache默认配置可能没满足这个要求。下面是我亲测有效的解决步骤:
1. 把Symfony的public目录设为网站根目录
GoDaddy默认的网站根目录一般是public_html,但Symfony的入口文件在项目的public文件夹里。你需要:
- 登录GoDaddy主机控制面板,找到「网站设置」里的「网站根目录」选项
- 将根目录修改为你的Symfony项目下的
public文件夹(比如项目放在public_html/my-symfony-app里,就把根目录设为public_html/my-symfony-app/public)
2. 调整public目录下的.htaccess规则
Symfony的public目录里默认有.htaccess,但GoDaddy的Apache可能需要更明确的重写规则:
- 打开
public/.htaccess,替换成下面的规则(如果原有规则不生效的话):
<IfModule mod_rewrite.c> RewriteEngine On # 如果项目在子目录,把这里改成你的子路径,比如RewriteBase /my-app/ RewriteBase / # 非静态文件的请求都转发到index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
3. 确认Apache的mod_rewrite模块已启用
虽然GoDaddy大部分主机默认开启了这个模块,但还是可以检查下:
- 在public目录新建一个
phpinfo.php,内容写<?php phpinfo(); ?>,访问这个文件后搜索mod_rewrite,看是否显示已启用 - 如果没启用,要么在主机控制面板的「Apache设置」里找开启选项,要么联系GoDaddy客服帮忙开启
4. 清除Symfony缓存
有时候缓存会导致路由不生效,尤其是生产环境:
- 如果有SSH权限,进入项目根目录执行:
php bin/console cache:clear --env=prod
- 没有SSH权限的话,直接手动删除
var/cache文件夹里的所有内容
另外要注意,GoDaddy主机可能有服务器缓存,修改配置后可能等几分钟才会生效,记得刷新浏览器缓存再测试路由哦!
内容的提问来源于stack exchange,提问作者Marshiewooooooo
相关产品推荐
相关产品推荐

