Прежде всего, я надеюсь, что я буду достаточно ясным, и вы сможете мне помочь.
Есть кое-что, чего я действительно не понимаю, я пытался понять это часами, но тщетно . Вот в чем дело:
Когда я набираю domainname/profile
, я хочу, чтобы меня перенаправили на domainname/index.php?url=profile
, но вместо этого я перенаправляюсь на domainname/index.php?url=index.php
.
в моем рутере. php файл, я сделал var_dump($_GET)
, и он показывает 'url' => 'index.php'
, вот откуда я это знаю.
Вот мой корень. php:
<?php
require_once('views/View.php');
class Router {
private $_controller;
private $_view;
public function route() {
try {
// Load classes automatically
spl_autoload_register(function($class) {
require_once('models/'.$class.'.php');
});
$url = [];
if(isset($_GET['url']) && $_GET['url'] != '') {
$url = explode('/', filter_var($_GET['url'], FILTER_SANITIZE_URL));
$controllerName = ucfirst(strtolower($url[0]));
$controllerClass = "Controller".$controllerName;
$controllerFile = 'controllers/'.$controllerClass.'.php';
var_dump($_GET); die;
if(file_exists($controllerFile)) {
require_once($controllerFile);
$this->_controller = new $controllerClass($url);
} else {
throw new Exception('Page introuvable');
}
} else {
require_once('controllers/ControllerHome.php');
$this->_controller = new ControllerHome($url);
}
} catch(Exception $e) {
$errorMsg = $e->getMessage();
$this->_view = new View('Error');
$this->_view->generate(['errorMsg' => $errorMsg]);
}
}
}
?>
Вот мой .htaccess:
RewriteEngine on
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.php?url=$1
Странно то, что когда я заменяю (.*)
на [a-ZA-Z0-9]+
, ЭТО РАБОТАЕТ, я перенаправляюсь на страницу domainname / index. php? Url = profile и мой var_dump($_GET)
показывает 'url' => 'profile'
.
Что не так? Я хотел использовать (.*)
, потому что он позволяет мне использовать несколько косых черт в моих URL-адресах, я могу "исправить" это, добавив несколько правил RewriteRules, например RewriteRule ^[a-zA-Z0-9]+/[a-zA-Z0-9]+$ index.php?url=$1
, но, на мой взгляд, это странный способ заставить его работать, это не полностью динамический ...
В любом случае, надеюсь, вы поймете мою проблему. Заранее спасибо!
Кстати: я работаю на своем локальном хосте, но у меня такая же проблема на моем удаленном сервере.