GoDaddy服务器仅根路由可用,非根路由返回404问题求助
GoDaddy cPanel共享主机路由配置问题解决
问题背景
在GoDaddy Deluxe Linux Hosting with cPanel主机上配置基础路由时,仅根路径(/)可正常访问,访问带路径的URL(如/test)时返回Not Found。服务器未执行index.php中的路由逻辑,而是直接查找对应文件/文件夹,当前配置的.htaccess未生效,且无Apache全局配置权限。
当前配置
.htaccess 文件
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php
index.php 代码
<?php $request = $_SERVER['REQUEST_URI']; $viewDir = '/'; switch ($request) { case '': case '/': require __DIR__ . $viewDir . 'home.html'; break; case '/test': require __DIR__ . $viewDir . 'boost.html'; break; }
解决步骤
1. 修正.htaccess规则
GoDaddy的Apache环境需要明确将请求路径传递给index.php,修改后的.htaccess如下:
RewriteEngine On # 排除真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 转发所有请求到index.php,保留请求路径和查询参数 RewriteRule ^(.*)$ index.php/$1 [L,QSA]
!-d规则排除真实存在的目录,避免误转发index.php/$1将请求路径作为PATH_INFO传递给index.php[L]标记表示执行完当前规则后停止后续重写[QSA]标记保留原请求的查询字符串
2. 检查.htaccess的位置与权限
- 确保.htaccess文件放在网站根目录(与index.php同级)
- 文件权限设置为
644(可通过cPanel文件管理器修改)
3. 调整index.php的路径处理逻辑
部分情况下$_SERVER['REQUEST_URI']会包含查询参数,导致switch匹配失败,同时添加默认case处理404场景:
<?php // 去除查询参数,仅保留路径部分 $request = strtok($_SERVER['REQUEST_URI'], '?'); $viewDir = '/'; switch ($request) { case '': case '/': require __DIR__ . $viewDir . 'home.html'; break; case '/test': require __DIR__ . $viewDir . 'boost.html'; break; default: http_response_code(404); require __DIR__ . $viewDir . '404.html'; break; }
4. 确认mod_rewrite模块启用
GoDaddy共享主机默认启用mod_rewrite,若仍有问题,可通过cPanel的MultiPHP INI Editor或联系客服确认模块状态。
5. 清除缓存测试
修改配置后,使用浏览器隐私模式或清除缓存后测试,避免旧缓存影响结果。
内容的提问来源于stack exchange,提问作者Listak
相关产品推荐
相关产品推荐

