簡體   English   中英

Apache-htaccess 500內部服務器錯誤

[英]Apache - htaccess 500 internal server error

我正在學習如何制作PHP MVC應用程序,並且遵循的教程涉及創建兩個.htaccess文件-一個用於防止用戶導航到應用程序文件夾和文件。 另一個重寫URL的顯示方式,以便我解析和檢索控制器,方法和參數。

在我的XAMPP服務器上部署這些文件時,它們可以正常工作。 但是,通過FTP將這些文件部署到我的大學服務器上時,出現500 Internal Server Error ,並且刪除這些文件將使我能夠看到我的應用程序。 但是我需要這些文件,否則我將無法調用適當的控制器,模型和視圖。

我一直在尋找答案,許多解決方案都說可能存在語法錯誤,我不認為我有任何錯誤,因為它可以在XAMPP實例上正常工作。 其他答案是服務器本身可能未配置為允許我上載此類文件或類似內容。

我無權訪問大學服務器的配置,我知道這可能會妨礙您提供給我的任何解決方案。 因此,如果有任何PHP解決方案至少可以讓我以所需的方式解析URL,我將很樂意刪除.htaccess文件。

第一個.htaccess文件,位於應用程序的應用程序目錄中:

Options -Indexes

第二個.htaccess文件; 位於我的應用程序的公共目錄中:

Options -MultiViews
RewriteEngine On

RewriteBase /~21249593/Internet_Technologies/Element_2/public

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

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

用來解析URL調用適當的控制器和方法的PHP類,我已經發布了完整的邏輯,所以你可以理解解析如何工作的:

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 url。

無論如何,您可以使用http://yourdomain/index.php?url=something ,無論該http://yourdomain/index.php?url=something如何工作。 對於任何“清潔”的東西,您都需要更改服務器配置。

好吧,如果您無法重寫URL,則必須將應用程序的鏈接更改為應用程序需要它們的格式。

因此,如果您不打算鏈接到mydomain.com/controller/method/param1/param2 ...,則需要鏈接到mydomain.com/index.php?url=controller/method/param1/param2.。

鏈接不再那么漂亮了,但是它們會起作用。

嘗試更改“ .htaccess”文件的“編碼”。 它為我工作。 我使用ANSI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM