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

PHP URL重定向脚本迁移新服务器后出现Undefined index错误求修复方案

错误原因

所有Undefined index报错本质是新服务器的PHP版本错误报告等级配置更严格,旧服务器默认屏蔽了Notice级别的提示,因此之前没有暴露问题。报错核心是代码直接读取$_GET超全局变量中的参数,当这些参数不存在于当前请求URL中时,PHP就会抛出索引不存在的提示。

修复方案

在不修改原有重定向逻辑的前提下,只需在代码最开头预先声明所有用到的GET参数的默认值,即可解决所有报错,修复后的完整代码如下:

// 预先给所有用到的GET参数设置默认值
$_GET['idsub'] = $_GET['idsub'] ?? '';
$_GET['idsub2'] = $_GET['idsub2'] ?? '';
$_GET['idf'] = $_GET['idf'] ?? '';
$_GET['idp'] = $_GET['idp'] ?? '';
$_GET['page'] = $_GET['page'] ?? '';
$_GET['demmi'] = $_GET['demmi'] ?? '';
$_GET['key'] = $_GET['key'] ?? '';
$_GET['vals'] = $_GET['vals'] ?? '';

if(!empty($_GET['idsub'])||!empty($_GET['idsub2'])||!empty($_GET['idf'])||!empty($_GET['idp']))
header("Location: /_".preg_replace('/\.php$/','',$_GET['idsub'])."/_".preg_replace('/\.php$/','',$_GET['idsub2'])."/_".preg_replace('/\.php$/','',$_GET['idf'])."/_".preg_replace('/\.php$/','',$_GET['idp']).($_GET['page']?"?page=".$_GET['page']:''),301);

if($_GET['idp']=='.php')unset($_GET['idp']);
if($_GET['idsub']=='.php')unset($_GET['idsub']);
if($_GET['idsub2']=='.php')unset($_GET['idsub2']);
if($_GET['idf']=='.php')unset($_GET['idf']);

if($_GET['demmi']!='true' && (!empty($_GET['idsub'])||!empty($_GET['idsub2'])||!empty($_GET['idf'])||!empty($_GET['idp']))){

$key=(empty($_GET['idf'])?'':'1').(empty($_GET['idsub'])?'':'2').(empty($_GET['idsub2'])?'':'3').(empty($_GET['idp'])?'':'4');
$vals=(empty($_GET['idf'])?'':'/'.preg_replace('/.php$/','',$_GET['idf'])).(empty($_GET['idsub'])?'':'/'.preg_replace('/.php$/','',$_GET['idsub'])).(empty($_GET['idsub2'])?'':'/'.preg_replace('/.php$/','',$_GET['idsub2'])).(empty($_GET['idp'])?'':'/'.preg_replace('/.php$/','',$_GET['idp']));
$vals=preg_replace('/\/([^\/]*)$/','./$1',$key.$vals);
header("Location: /$vals".(empty($_GET['page'])?'':'?page='.$_GET['page']),301);
}

if($_GET['demmi']=='true' )
{
$key=str_split($_GET['key']); $i=0;
$vals=explode('/',str_replace('./','/',$_GET['vals']));
foreach($key as $h)
{switch($h)
{case '1': $_GET['idf']=$vals[$i].'.php'; break;
case '2': $_GET['idsub']=$vals[$i].'.php'; break;
case '3': $_GET['idsub2']=$vals[$i].'.php'; break;
case '4': $_GET['idp']=$vals[$i].'.php'; break;}
$i++;}
}

$idf=$_GET['idf'];
$idsub=$_GET['idsub'];
$idsub2=$_GET['idsub2'];
$idp=$_GET['idp'];
$page=$_GET['page'];

if (isset($page)) {
$page=$page;
} else {
$page=1;
}

可选快速方案

如果不需要排查这类提示信息,也可以直接在脚本最开头加入一行代码error_reporting(E_ALL & ~E_NOTICE);,直接屏蔽所有Notice级别的错误提示,无需修改原有逻辑也可解决报错问题。

内容的提问来源于stack exchange,提问作者amadou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:03:00