经营品牌: 强力巨彩 海佳彩亮 飞利浦 利亚德 创维 京东方 海康威视 仰邦 诺瓦 卡莱特 小鸟羽控
027-89992224
LED显示屏专业解决方案服务商
Professional solution service provider
首页 › 自言自语 › shopxo不存在的url会提示应用未启用

shopxo不存在的url会提示应用未启用

修改public/index.php,全部替换为以下代码。

<?php
// [ 前端入口文件 ]
namespace think;

require __DIR__.'/core.php';
require __DIR__ . '/../vendor/autoload.php';

$http = (new App())->http;
$response = $http->name('index')->run();

// ★★★ 全面404修正 ★★★
$content = $response->getContent();
$code = $response->getCode();
$need_404 = false;

// --- 检测1:ThinkPHP框架级错误提示 ---
// 这些是ThinkPHP在路由/控制器层面直接输出的错误文本,状态码都是200
$framework_errors = [
    '应用未启用',       // 多应用模式下,URL中的应用目录不存在
    '控制器不存在',     // URL中的控制器类不存在(如/sitemap/xxx)
    '方法不存在',       // 控制器中的方法不存在
    '操作不存在',       // 同上,某些ThinkPHP版本用此提示
    '非法访问',         // ShopXO Common::__call()输出的提示
];
foreach ($framework_errors as $err) {
    if (strpos($content, $err) !== false) {
        $need_404 = true;
        break;
    }
}

// --- 检测2:ShopXO数据不存在页面(tips_error模板)---
// 商品/文章/分类等数据不存在时,ShopXO渲染tips_error页面但状态码是200
if (!$need_404 && $code == 200) {
    $error_marks = ['不存在或已删除', '不存在'];
    $exclude_marks = ['购物车还是空的', 'empty-cart'];

    $has_error = false;
    foreach ($error_marks as $m) {
        if (strpos($content, $m) !== false) {
            $has_error = true;
            break;
        }
    }

    $is_exclude = false;
    foreach ($exclude_marks as $m) {
        if (strpos($content, $m) !== false) {
            $is_exclude = true;
            break;
        }
    }

    if ($has_error && !$is_exclude) {
        $need_404 = true;
    }
}

// --- 输出真正的404 ---
if ($need_404) {
    http_response_code(404);
    header('Content-Type: text/html; charset=utf-8');
    die('<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>404 - 页面不存在</title><meta name="robots" content="noindex,nofollow"><style>body{text-align:center;padding:80px 20px;font-family:sans-serif}h1{font-size:48px;color:#333}p{font-size:18px;color:#666}a{color:#1a73e8;font-size:16px}</style></head><body><h1>404</h1><p>您访问的页面不存在或已被删除。</p><a href="/">返回首页</a></body></html>');
}

$response->send();
$http->end($response);
?>

评论 (1 条)

王铭 2026-7-8

更新的代码,可以用这个。

<?php
// [ 前端入口文件 ]
namespace think;

require __DIR__.'/core.php';
require __DIR__ . '/../vendor/autoload.php';

$http = (new App())->http;
$response = $http->name('index')->run();

// ★★★ 软404修正(HTML结构检测法)★★★
$content = $response->getContent();
$code = $response->getCode();
$need_404 = false;

// 第1层:非HTML的框架错误(纯文本输出,无<html>标签)
if ($code == 200 && stripos($content, '<html') === false && stripos($content, '<!DOCTYPE') === false) {
    $framework_errors = ['应用未启用', '控制器不存在', '方法不存在', '操作不存在', '非法访问'];
    foreach ($framework_errors as $err) {
        if (strpos($content, $err) !== false) {
            $need_404 = true;
            break;
        }
    }
}

// 第2层:tips-error CSS类(ShopXO数据不存在页面)
if ($code == 200 && !$need_404 && stripos($content, 'tips-error') !== false) {
    $need_404 = true;
}

// 输出真正的404
if ($need_404) {
    http_response_code(404);
    header('Content-Type: text/html; charset=utf-8');
    die('<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>404 - 页面不存在</title><meta name="robots" content="noindex,nofollow"><style>body{text-align:center;padding:80px 20px;font-family:sans-serif}h1{font-size:48px;color:#333}p{font-size:18px;color:#666}a{color:#1a73e8;font-size:16px}</style></head><body><h1>404</h1><p>您访问的页面不存在或已被删除。</p><a href="/">返回首页</a></body></html>');
}

$response->send();
$http->end($response);
?>

网站首页
网站首页
案例展示
案例展示
在线客服
在线客服
一键拨号
一键拨号
返回顶部