Witam, stworzyłem plik .htaccess o treści:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Od teraz wszystko co napiszę przekierowuje mnie na index.php.
W pliku index znajduje się router, który pobiera z $_GET cały url, a następnie funkcją explode tworzy tablicę z elementów oddzielonych "/". Później funkcja sprawdza, czy istnieje plik, który stanowi indeks [0] tej tablicy + ".php".
I jeśli taki plik jest, to go otwiera. Jeśli nie ma, to nic się nie dzieje, po prostu przekierowuje na index.php.
Natomiast problem istnieje w momencie kiedy np. istnieje plik, ale ktoś wpisze z palca do url kolejne elementy.
Przykładowo wszystko otwiera się ok jeśli wpiszemy z palca www.domena.pl/blog
ale jeśli już wpiszemy www.domena.pl/blog/asd
to otwiera się treść pliku blog, jednak padają wszystkie css, dołączone obrazki itd. Pojawia się sama treść.
App.php
<?php
class App {
protected $controller = 'Home';
public function __construct() {
$url = $this->parseUrl();
if (file_exists( 'controllers/' .$url [0] . '.php')) {
$this->controller = $url [0];
unset($url[0]);
}
require_once 'controllers/' . $this->controller . '.php';
}
public function parseUrl() {
if (isset($_GET['url'])) {
return $url = explode ('/', filter_var(rtrim($_GET['url'], '/') , FILTER_SANITIZE_URL));
}
}
}
?>
I jeszcze Index.php:
<?php
require_once 'App.php';
$router = new App();
?>