Apache - htaccess 500 内部服务器错误

Apache - htaccess 500 internal server error

我正在学习如何制作 PHP MVC 应用程序,我遵循的教程涉及创建两个 .htaccess 文件 - 一个防止用户导航到应用程序文件夹和文件;另一个另一个重写 URL 的呈现方式,以便我解析和检索控制器、方法和参数。

在我的 XAMPP 服务器上部署这些文件时,它们工作正常。但是,当通过 FTP 将这些文件部署到我的大学服务器时,会出现 500 Internal Server Error,删除这些文件将允许我查看我的应用程序。但我需要这些文件,否则我无法调用适当的控制器、模型和视图。

我四处寻找答案,许多解决方案都说可能存在语法错误,我认为我没有语法错误,因为它在 XAMPP 实例上运行得很好。其他答案是服务器本身可能未配置为允许我上传此类文件或类似文件。

我无法访问我大学服务器的配置,我知道这可能会妨碍您提供给我的任何解决方案。所以,如果 有任何 PHP 解决方案,至少 让我按照我需要的方式解析 URL,我很乐意删除 .htaccess 个文件。

第一个 .htaccess 文件,位于应用程序的 app 目录中:

Options -Indexes

第二个.htaccess文件;位于我的应用程序的 public 目录中:

Options -MultiViews
RewriteEngine On

RewriteBase /~21249593/Internet_Technologies/Element_2/public

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.+)$ index.php?url= [QSA,L]

PHP class 用于解析 URL 以调用适当的控制器及其方法,我已经发布了完整的逻辑以便您了解 如何 解析有效:

class App {
    protected $controller = 'home';
    protected $method = 'index';
    protected $params = array();

    public function __construct() {
        $url = $this->parseUrl();

        if (file_exists('../app/controllers/' . $url[0] . '.php')) {
            $this->controller = $url[0];
            unset($url[0]);
        }

        require_once '../app/controllers/' . $this->controller . '.php';

        $this->controller = new $this->controller;

        if (isset($url[1])) {
            if (method_exists($this->controller, $url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            }
        }

        $this->params = $url ? array_values($url) : array();

        call_user_func_array([$this->controller, $this->method], $this->params);
    }

    public function parseUrl() {
        if (isset($_GET['url'])) {
            return $url = explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL));
        }
    }
}

非常感谢您在这里给我的任何帮助

编辑

我应该声明 XAMPP 使用的是 2.4.9 Apache,FTP 是 2.2.3

您的帐户似乎 mod_rewrite 或通常禁止使用 .htaccess。您应该询问您的管理部门是否可以更改,如果不能,您不能使用 mod_rewrite 网址。

你无论如何都可以做的是使用像 http://yourdomain/index.php?url=something 这样的 url,无论如何这些都应该有效。对于任何 "cleaner" 您都需要更改服务器配置。

好吧,如果您不能重写 URL,则必须将应用程序的 link 更改为应用程序需要的格式。

因此 link 连接到我的域。com/controller/method/param1/param2...您需要 link 连接到我的域。com/index。php?url=controller/method/param1/param2..

link 不再那么漂亮了,但它们会起作用。

尝试更改“.htaccess”文件的 'Encoding'。它对我有用。我用的是 ANSI。