PHP - 路由在子文件夹站点中不起作用

PHP - Routing not working in subfolder sites

我正在尝试创建一个 php 项目。在路由时,url 路由与虚拟主机域完美配合。但是当我将我的项目放在子文件夹中时,该功能无法正常工作。我的路由器 Class 看起来像

 class Router{
    private $request;
    public function __construct($request){
        $this->request = $request;
    }
    public function get($route, $file){
        $uri = trim( $this->request, "/" );
        $uri = explode("/", $uri);
        if (empty($uri[0])) {
            $file['platform'] = '';
            $file['controller'] = 'Index';
            $file['action'] = 'index';
        }
        if($uri[0] == trim($route, "/")){
            define("PLATFORM", isset($file['platform']) ? $file['platform'] : '');
            define("CONTROLLER", isset($file['controller']) ? $file['controller'] : 'Index');
            define("ACTION", isset($file['action']) ? $file['action'] : 'index');
            $plarform = !empty(PLATFORM)? PLATFORM . DS: '';
            define("CURRENT_CONTROLLER", CONTROLLER_PATH . $plarform);
            define("CURRENT_VIEW", VIEW_PATH . PLATFORM . DS);
        }
    }
}

并像

一样初始化函数
require CORE_PATH.'Router.php';
$request = $_SERVER['REQUEST_URI'];
$router = new Router($request);

但在

中同样有效

http://www.mysite.localhttp://www.mysite.local/abouthttp://www.mysite.local/contact

这是一个虚拟主机。

但是当我调用

http://localhost/mysite/http://localhost/mysite/abouthttp://localhost/mysite/contact

它没有像我预期的那样工作。请给我任何想法来解决这个问题。

我的 .htaccess 如下所示。

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/ [L]
</IfModule>

我已经尝试过

RewriteBase /mysite

是的,经过努力,我终于找到了解决方案。 我刚刚将 $_SERVER['REQUEST_URI']; 更改为 $SERVER['PHP_SELF'];

$SERVER['PHP_SELF'];中有一个index.php。 也就是说如果 URL 是 http://www.mysite.local/about 实际 PHP_SELF

http://www.mysite.local/index.php/about

http://localhost/mysite/index.php/about

所以我只是用 index.php 展开 siteurl,如下所示。

    require CORE_PATH.'Router.php';
    $request = $_SERVER['PHP_SELF'];
    $requesturi = explode('index.php', $request);
    unset($requesturi[0]);
    $request = implode($requesturi);
    $router = new Router($request);