linux上的php-htaccess问题

linux上的php-htaccess问题,php,mod-rewrite,Php,Mod Rewrite,我在windows上创建了一个定制的php MVC,它在没有任何bug的情况下运行得很好,但在linux上我遇到了一些bug,比如除了默认的控制器之外,我无法访问任何其他控制器 e、 g:localhost/mymvc-此url将我重定向到默认控制器 但是,当我尝试打开任何其他控制器时,例如:localhost/mymvc/projects我得到一个“404未找到错误” 以下是我的重定向功能: /* ***** Getting URL ***** */ $url = isset($_GET['u

我在windows上创建了一个定制的php MVC,它在没有任何bug的情况下运行得很好,但在linux上我遇到了一些bug,比如除了默认的控制器之外,我无法访问任何其他控制器

e、 g:
localhost/mymvc
-此url将我重定向到默认控制器

但是,当我尝试打开任何其他控制器时,例如:
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]);
我确信这里没有bug,但我还是希望你们能回顾一下。我认为.htaccess文件存在问题,因此以下是我在其中的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

取消您的htaccess访问权限

将启用重写引擎:
重新启动引擎

重写的基本目录为/:
RewriteBase/

如果请求与不存在的文件匹配,请继续:
RewriteCond%{REQUEST\u FILENAME}-f

如果请求与不存在的目录匹配,请继续:
RewriteCond%{REQUEST\u FILENAME}-d

如果请求与不存在的符号链接匹配,请继续:
RewriteCond%{REQUEST\u FILENAME}-l

重写到index.php:
//我的意思是,如果规则匹配,请不要再处理此规则下的任何重写规则。
//QSA将原始请求URL中的任何查询字符串附加到重写目标中创建的任何查询字符串
RewriteRule^(+)$index.php?url=$1[QSA,L]

正如我们所看到的,您的htaccess没有实际问题。 现在需要检查apache中是否启用了mod_rewrite

您只需输出phpinfo()并检查它是否已启用

现在进入PHP

首先要记住linux是区分大小写的

调试:

在这条线之后

$page='application/controllers/'。$url['0']..php'

添加这个变量转储

var_dump($page)

检查路径是否正确,然后执行其余的调试分析


关于

您确定已打开mod_rewrite吗?您可以通过在控制台中键入
a2enmod rewrite
来打开它。然后简单地重新启动Apache。我不知道它是否能工作,但这是一个好的开始。同时检查htconf中是否也设置了“allowoverride all”,并且您可能需要htaccess中的“options+followsymlinks”。@Jelmer,请注意,
a2enmod
是Debian/Ubuntu的东西,而不是正式的Apache工具。@Charles Oh好的。我不知道,谢谢。我今天刚刚安装了自己的服务器(Debian),所以我对它有点陌生:)另外,请注意windows是不区分大小写的,而Linux是区分大小写的,因此,如果您的页面名为home.php,那么要求home.php将在windows下工作,而不是在Linux下。