我有一个涉及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警告:无法修改标题信息 – 在第12行的/ PATH中已经由(path:6处开始的输出)发送的标题
第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文件,并通过index.phpreplace1 ,并尝试访问example.com/index.php我没有得到错误。
如果我设置$uri[0] = '1'; 手动我没有得到警告。
如果我设置$uri = '/1'; 手动我没有得到警告。
如果我把更多的代码添加到else { ,比如将$page_id设置为别的东西,它什么也不做。 似乎只有标题行被执行并产生警告。
看起来像mod_rewrite是搞乱了$_SERVERvariables。 也许某种编码问题,因为var_dump是正常的。
似乎PHP错误比任何其他更多。
如果脚本中有任何输出,则不能再执行header()函数。 所以
echo 1; header(...)
将会失败,因为您已经将号码1发送回客户端。 所以你var_dump发送一些输出,这导致header()函数失败。 删除var_dump。