php - linux 上的 htaccess 问题

标签 php mod-rewrite

我在 Windows 上创建了一个自定义的 php MVC,它运行良好,没有任何错误,但在 Linux 上,我遇到了一些错误,比如我无法访问除我的默认 Controller 之外的任何其他 Controller 。

例如:localhost/mymvc - 这个 url 将我重定向到我的默认 Controller

但是当我尝试打开任何其他 Controller 时,例如:localhost/mymvc/projects 我收到“404 not found error”

这是我的重定向函数:

/* ***** 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]

最佳答案

了解您的 htaccess

将启用重写引擎:
RewriteEngine 开启

重写的基本目录将是/:
RewriteBase/

如果请求匹配一个不存在的文件,继续:
RewriteCond %{REQUEST_FILENAME} !-f

如果请求匹配一个不存在的目录,继续:
RewriteCond %{REQUEST_FILENAME} !-d

如果请求匹配一个不存在的符号链接(symbolic link),继续:
RewriteCond %{REQUEST_FILENAME} !-l

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

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

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

现在进入您的 PHP。

首先一定要记住,linux 是区分大小写的。

调试:

在这一行之后

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

添加这个 var_dump

var_dump($page);

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

问候

关于php - linux 上的 htaccess 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14034622/

相关文章:

apache - SSL 证书(让我们加密)不适用于所有服务器名称

php - 需要在桌面和移动设备的列中换行的帮助

regex - .htaccess 重写问题

php - Codeigniter Htaccess 和 URL 重定向问题

php - Zend 2-理论如何为三个实体一对多插入?

php - 使用 PHP 重写 URL

apache:重写前的基本身份验证

php - MySQL IN() 列表是否有限制

php - 意外的 T_STRING 错误 (PHP)

javascript - 如何在表单字段输入中生成简短的唯一代码?