Проблема в том, что вы затем переходите к URL-адресу http://localhost/how/
и просто пытаетесь найти каталог на сервере с надписью «how» и не находите его. Это называется маршрутизацией, и ее обычно обрабатывают с использованием правила перезаписи. Вот основная идея:
- Пользователь попадает в ваш файл index.php без строки запроса и получает файл по умолчанию. Как правило, ваш сервер не будет показывать index.php в адресной строке, потому что он просто загрузит любой файл с надписью «index».
- При загрузке нового шаблона вы добавляете его как параметр строки запроса. Что-то вроде
http://localhost.com/?view=how
- В файле PHP вы можете получить эту переменную с помощью
$_GET
Название переменной и сделать вашу логику (включить файл, изменить выход и т.д.)
Затем нужно добавить правило перезаписи на сервер. С apache, который делается путем добавления файла с именем .htaccess
в корень вашего сервера. Добавьте это внутри этого файла:
RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.php?view=$1 [QSA]
Это будет считать, что URL и обновлять его так, что он выглядит как http://localhost/how/
в адресной строке, но интерпретируется PHP как имеющий параметр строки запроса на основной файл индекса. Что касается вашего коммутатора заявление он изменял выглядеть примерно так:
$aPage = 'app/views/home.php';
switch($_GET['view']) {
case "home":
$aPage = "app/views/home.php";
break;
case "how":
$aPage = "app/views/how.php";
break;
}
return $aPage;
Хотя это может быть проще просто иметь вашу функцию логики, чтобы быть больше, как это:
$route = $_GET['view'] ? $_GET['view'] : 'home'; // if view exists set it, if not default to 'home'
$validRoutes = array('home', 'how'); // array of acceptable routes
if(in_array($route, $validRoutes)) {
return sprintf('app/views/%s', $route);
}
return false; // return false if invalid
HTTP: // PHP. net/manual/en/function.parse-url.php – AbraCadaver
Сделайте 'var_dump'' $ _SERVER ['REQUEST_URI'] ', и вы, вероятно, увидите, что он включает в себя косые черты и т. д. –
У вас есть файл .htaccess, который указывает на ваш index.php? – cmorrissey