У меня проблема с PHP и mod_rewrite.
Я пытаюсь загрузить страницу example.com/1
.
<?php
// get requested uri
$uri = explode('/', strtolower(substr($_SERVER['REQUEST_URI'], 1)));
var_dump($uri[0]);
// route current page
if ($uri[0] == '1'){
$page_id = '<br />1';
} else {
header("HTTP/1.0 404 Not Found");
}
echo $page_id;
?>
Var_dump выдает string(1) "1"
и отображаемый page_id равен 1
.
Проблема в том, что я также получаю следующее предупреждение.
Предупреждение PHP: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с PATH: 6) в / PATH в строке 12
Строка 6 - это var_dump.
Строка 12 - это строка заголовка.
Я не должен получать это предупреждение, поскольку этот код не должен запускаться.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]
IndexIgnore *
Options -Indexes
<VirtualHost *:80>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
DocumentRoot PATH/example.com/public
LogLevel warn
ErrorLog /var/log/apache2/example.com-error.log
CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>
Кое-что пробовал.
Когда я удаляю .htaccess
файл и заменить 1
по index.php
и попробуйте получить доступ example.com/index.php
Я не получаю сообщения об ошибке.
Если я установлю $uri[0] = '1';
вручную я не получаю предупреждения.
Если я установлю $uri = '/1';
вручную я не получаю предупреждения.
Если я добавлю еще код в else {
, как установить $page_id
к чему-то другому, он ничего не делает. Кажется, что выполняются только строки заголовка и выдают предупреждение.
Похоже, что mod_rewrite каким-то образом портит $_SERVER
переменная. Может быть, какая-то проблема с кодировкой, так как var_dump в норме.
Кажется, ошибка PHP больше, чем что-либо еще.
Если есть ЛЮБОЙ вывод сценария, вы больше НЕ МОЖЕТЕ выполнять функцию header (). Так
echo 1; header(...)
Не удастся, потому что вы уже отправили номер 1 клиенту. Итак, ваш var_dump отправляет некоторый вывод, и это приводит к сбою функции header (). Удалите файл var_dump.