У меня есть файл .htaccess
с этими правилами:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
У меня также есть файл Router.php
:
<?php
class Router
{
function __construct()
{
print_r($_GET);
$this->request = $_GET['url'];
$this->request = rtrim($this->request, "/");
$this->params = explode("/", $this->request);
print_r($this->params);
$this->controller = $this->params[0];
if ($this->controller == "index.php")
$this->controller = "Index";
$this->controller = ucfirst($this->controller);
$file = 'controllers/' . $this->controller . '.php';
if (file_exists($file)) {
require_once $file;
$this->connection = new $this->controller($this->params);
} else {
$file = 'controllers/PageNotFound.php';
$this->controller = "PageNotFound";
require_once $file;
$this->connection = new $this->controller();
}
}
}
и header.php
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<link href="/style.css" rel="stylesheet" type="text/css">
<title>System stypendialny</title>
</head>
<body>
У меня проблема с файлом .htaccess
. Когда я использую эту версию файла, и я пытаюсь использовать этот http://localhost/academhip_system/ URL в браузере, я вижу это:
Array() Примечание: Неопределенный индекс: url в C:\xampp\htdocs\academhip_system\libs\Router.php в строке 8 Массив ([0] =>)
Но когда я RewriteCond %{REQUEST_FILENAME} !-f
эту строку (RewriteCond %{REQUEST_FILENAME} !-f
), тогда файл CSS не загружается.
Вы можете сохранить свой.htaccess как есть. Если вы удалите условие -f, маршрутизатор должен будет обрабатывать все запросы к css, изображениям и javascript -f, а также, и это просто боль.
Вместо этого установите контроллер по умолчанию в свой Router-класс:
$this->request = isset($_GET['url'])? $_GET['url] : 'default';
то вам просто нужно создать файловые controllers/default.php
которые будут использоваться, если $_GET['url]
не установлен.
$_GET['url]
существует только в том случае, если файл, к которому вы пытаетесь получить доступ, отсутствует (именно тогда запускается RewriteRule). Если папка/scholarship_system/
существует и в этой папке естьindex.php
, она сразу же будет использовать ее без перезаписи.