我正在尝试创建一个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.local
,http://www.mysite.local/about
,http://www.mysite.local/contact
这是一个虚拟主机。
但是当我打电话给
时 http://localhost/mysite/
,http://localhost/mysite/about
,http://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
答案 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);