我正在学习如何制作PHP MVC应用程序,我所遵循的教程包括创建两个.htaccess
文件 - 一个用于防止用户导航到应用程序文件夹和文件;另一个是重写URL的呈现方式,以便我解析和检索控制器,方法和参数。
在我的XAMPP服务器上部署这些文件时,它们可以正常工作。但是,当通过FTP将这些文件部署到我的大学服务器上时,会出现500 Internal Server Error
,删除这些文件将允许我查看我的应用程序。但我需要这些文件,否则我无法调用适当的控制器,模型和视图。
我一直在寻找答案,许多解决方案都说可能存在语法错误,我不相信我有任何错误,因为它在XAMPP实例上运行得很好。其他答案是服务器本身可能没有配置为允许我上传这样的文件或类似的东西。
我无法访问我大学服务器的配置,我知道这可能会妨碍您提供给我的任何解决方案。那么,如果 至少 的任何PHP解决方案让我按照我需要的方式解析URL,我会很乐意删除.htaccess
个文件
第一个.htaccess
文件,位于应用程序的app目录中:
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]
PHP类用于解析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
答案 0 :(得分:1)
您的帐户通常会禁止使用mod_rewrite或.htaccess。您应该询问您的管理部门是否可以更改,否则,您不能使用mod_rewrite网址。
无论如何,您可以使用http://yourdomain/index.php?url=something
之类的网址,这些网址应该无论如何都可以使用。对于任何“更干净”的东西,您需要更改服务器配置。
答案 1 :(得分:0)
好吧,如果您无法重写URL,则必须将应用程序的链接更改为应用程序所需的格式。
所以链接到mydomain.com/controller/method/param1/param2 ...你需要链接到mydomain.com/index.php?url=controller/method/param1/param2 ..
链接不再那么漂亮,但它们会起作用。
答案 2 :(得分:0)
尝试更改'编码' ' .htaccess'文件。它对我有用。我使用ANSI。