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

MAMP环境正常的PHP路由在生产服务器失效问题排查

MVC路由生产环境失效排查求助

我正在学习MVC架构,本地MAMP环境下路由功能运行正常,但部署到生产服务器后路由失效。服务器可以执行index.php,但无法触发控制器逻辑。经过3天排查,发现代码卡在route.php的preg_match判断语句处。通过var_dump输出可知:$url为字符串"/",$request_uri为空字符串,$parameters为NULL。

相关代码如下:

index.php

<?php
//require __DIR__ ."/database.php";
//require __DIR__ ."/model.php";
require __DIR__. '/route.php';
require __DIR__. '/controller/controller.php';

Route::run("/","HomeController@index");

route.php

<?php

class Route {
    public static function parse_url(){
        $dirname= dirname($_SERVER["SCRIPT_NAME"]);
    $basename=basename($_SERVER["SCRIPT_NAME"]);
    $request_uri=str_replace([$dirname,$basename], null, $_SERVER["REQUEST_URI"]);
    return $request_uri;
    }

    public static function run($url,$callback,$method="GET"){

        $method =explode('|', strtoupper($method));
        if (in_array($_SERVER["REQUEST_METHOD"],$method)){

        
        $patterns= [
            '{url}'=>'([0-9a-zA-Z]+)',
            '{id}'=> '([0-9]+)'
        ];

        $url= str_replace(array_keys($patterns), array_values($patterns),$url);

        $request_uri=self::parse_url();
        if (preg_match('@^'.$url.'$@',$request_uri,$parameters)){ //代码在此处停止执行
            unset($parameters[0]);
            
            if (is_callable($callback)){
                call_user_func_array($callback, $parameters);

            }
            $controller= explode('@',$callback);
            $className=explode('/',$controller[0]);
            $className=end($className);
            $controllerFile=__DIR__."/controller/".strtolower($controller[0]).'.php';
             if (file_exists($controllerFile)){
                require $controllerFile;
                call_user_func_array([new $className,$controller[1]],$parameters);
             }

        }
    }
}
}

controller.php

<?php


class Controller{
    
    public function view($name, $result=null,$data=null,$redirect=null){
        
        function showMessage(){
            if (isset($_SESSION["message"])){
                echo $_SESSION["message"];
                unset($_SESSION["message"]);
            }
        }
        $result=$result;
        $data=$data;
        if (isset($redirect)){
            header("Location:/project/$redirect");
        }
        require __DIR__."/../view/" . strtolower($name). '.php';
    }
    public function model($name){
        require  __DIR__."/../model/" . strtolower($name). '.php';
        return new $name();
    }
    
}

HomeController.php

<?php

class HomeController extends Controller{
    public function index(){
        
        $this->view("home");
    }
}

.htaccess

RewriteEngine On
RewriteRule ^([0-9a-zA-Z-_/]+)$ index.php [QSA]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:39