linux上的php-htaccess问题
我在windows上创建了一个定制的php MVC,它在没有任何bug的情况下运行得很好,但在linux上我遇到了一些bug,比如除了默认的控制器之外,我无法访问任何其他控制器 e、 g: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
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下。