Я пытаюсь заставить работать систему маршрутизации PHP URI.
При комментировании строки $page_url = 'services';
появляется следующая ошибка.
PHP Warning: Cannot modify header information - headers already sent by (output started at PATH:12) in PATH on line 22
Строка 12 - это var_dump, а строка 22 - это 404 заголовка.
Если я раскомментирую $page_url = 'services';
, я не получу сообщение об ошибке.
Закомментированный или некомментированный, var_dump выдает одно и то же: string (8) "services".
Я загружаю страницу http://testwebsite.com/fr/services
Вот код index.php
.
<?php
// get requested uri
$uri = explode('/', strtolower(substr($_SERVER['REQUEST_URI'], 1)));
//set variables
$lang = $uri[0];
$page_url = $uri[1];
//debug
$page_url = 'services';
var_dump($page_url);
// route current page
switch($page_url){
case 'services':
$page_id = 'services';
break;
default:
header("HTTP/1.0 404 Not Found");
break;
}
?>
Вот файл .htaccess
.
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php
AddDefaultCharset UTF-8
IndexIgnore *
Options -Indexes
Я не понимаю, почему он пытается запустить случай по умолчанию, когда переменная $ page_url определяется путем анализа запрошенного URI, но этого не происходит, если она установлена вручную, поскольку в обоих случаях var_dump выдает одно и то же.
Кроме того, если я добавлю echo'default';
к регистру по умолчанию, он не будет выводиться, но я все равно получу предупреждение в журнале. Это не имеет смысла для меня.
Спасибо за вашу помощь.
Редактировать
Следует отметить, что, если я добавлю echo'services';
к делу, он будет выведен. Я все еще получаю предупреждение в заголовке, хотя. Как будто break;
не регистрируется. Но это потому, что он также не отражает "default".