【发布时间】:2013-12-26 21:31:49
【问题描述】:
我在 Windows 上创建了一个自定义 php MVC,它运行良好,没有任何错误,但在 linux 上我面临一些错误,例如我无法访问除默认控制器之外的任何其他控制器。
例如:localhost/mymvc - 此网址将我重定向到我的默认控制器
但是当我尝试打开任何其他控制器时,例如:localhost/mymvc/projects 我收到“404 未找到错误”
这是我的重定向函数:
/* ***** Getting URL ***** */
$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = explode('/',$url);
/* ***** When URL does not contain any controller name call default controller ***** */
if(empty($url[0])){
$defaultpage = HOME;
require 'application/controllers/'.$defaultpage.'.php';
$controller = new $defaultpage();
$controller->loadModel($defaultpage);
$controller->index();
return false;
}
/* ***** When URL contains controller name ***** */
$page = 'application/controllers/'.$url['0'].'.php';
if(file_exists($page)){
require $page;
}else{
$this->error();
}
$controller = new $url[0];
$controller->loadModel($url[0]);
我确信这里没有错误,但仍然希望你们审查。我认为 .htaccess 文件有问题,所以这就是我的内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
【问题讨论】:
-
你确定 mod_rewrite 开启了吗?您可以通过在控制台中键入
a2enmod rewrite来打开它。然后只需重新启动 Apache。我想知道它是否会起作用,但这是一个好的开始。 -
还要检查 htconf 中是否设置了“allowoverride all”,您可能需要 htaccess 中的“options +followsymlinks”。
-
@Jelmer,请注意
a2enmod是 Debian/Ubuntu 的东西,而不是官方的 Apache 工具。 -
@Charles 哦,好吧。不知道,谢谢。我今天刚刚建立了自己的服务器(Debian),所以我对它有点陌生:)
-
另外,请注意 windows 不区分大小写,而 Linux 区分大小写,因此,如果您的页面名为 home.php,则需要 HOME.php 将在 windows 下工作,但在 Linux 下不工作。
标签: php mod-rewrite