mod_rewrite interfère avec $ _SERVER

J'ai un problème impliquant PHP et mod_rewrite.

J'essaie de charger la page example.com/1 .

index.php

 <?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; ?> 

Le file var_dump donne la ssortingng(1) "1" et le page_id écho est 1 .

Le problème est que je reçois également l'avertissement suivant.

PHP Warning: Impossible de modifier les informations d'en-tête – les en-têtes déjà envoyés par (sortie démarrée à PATH: 6) dans / PATH sur la ligne 12

La ligne 6 est le var_dump.

La ligne 12 est la ligne d'en-tête.

Je ne devrais pas get cet avertissement puisque ce code ne devrait pas être exécuté.

.htaccess

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA] IndexIgnore * Options -Indexes 

exemple, hôte virtuel

 <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> 

Certaines choses que j'ai essayé.

Lorsque je supprime le file .htaccess et que je remplace 1 par index.php et que j'essaie d'accéder à example.com/index.php je n'obtiens pas l'erreur.

Si je définis $uri[0] = '1'; Manuellement, je ne reçois pas l'avertissement.

Si j'ai configuré $uri = '/1'; Manuellement, je ne reçois pas l'avertissement.

Si j'ajoute plus de code à else { , comme définissez $page_id à autre chose, cela ne fait rien. Il semble que seules les lignes d'en-tête soient exécutées et produisent un avertissement.

Il semble que le mod_rewrite soit en quelque sorte déranger la variable $_SERVER . Peut-être un problème de encoding car le var_dump est normal.

Semble une erreur PHP plus que toute autre chose.

S'il n'y a QUELLE sortie d'un script, il est impossible de faire une fonction d'en-tête (). Alors

echo 1; header(...)

Échec, parce que vous avez déjà renvoyé le numéro 1 au client. Ainsi, votre var_dump envoie une sortie, ce qui entraîne l'échec de la fonction d'en-tête (). Supprimez le var_dump.