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

时间:2018-03-28 12:16:32

标签: php url-rewriting frameworks url-routing

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

 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/$1 [L]
</IfModule>

我已经尝试了

RewriteBase /mysite

1 个答案:

答案 0 :(得分:0)

Ya最后我在处理完毕后得到了一个解决方案。 我刚刚将$_SERVER['REQUEST_URI'];更改为$SERVER['PHP_SELF'];

index.php中有$SERVER['PHP_SELF'];。 也就是说,如果网址为http://www.mysite.local/about,则实际PHP_SELF

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

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

所以我只是用下面的index.php爆炸地址。

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