2010-09-15 7 views
1

J'ai le fichier .htaccess suivant sur mon Webroot:.htaccess La règle mod_rewrite "fonctionne", mais le serveur envoie le code 404!

DirectoryIndex index.htm index.html index.php AddType application/x-httpd-php .htm .html 
RewriteEngine On 
RewriteBase/

RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L] 

RewriteCond $1 !\.(gif|jpe?g|png|ico|css|js|pdf|mp3|flv|swf)$ 
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/(.+)\.htm$ /$1.php [nc,L,QSA] 

Le but de la règle de Rewrite est de changer toute demande d'une page avec une extension .htm à une demande pour le même nom avec un .php extension (sauf si le fichier avec extension .htm existe réellement). Cette règle semble "fonctionner" dans le sens où si je demande une page avec une extension .htm, j'obtiens le contenu PHP. C'est ce que je veux, mais en même temps, les outils d'inspecteur d'en-tête HTTP signalent que le site Web donne une réponse 404. Ce qui est bizarre, c'est que mes outils rapportent que dans le corps de LA MÊME RÉPONSE, le serveur renvoie le code HTML correct généré par le code PHP. Cela semble être une contradiction: page non trouvée, mais voici le contenu que vous vouliez quand même? Si j'oblige le serveur à envoyer un code 200 ([R = 200]), j'obtiens une réponse "Internal server error", et si je le force à envoyer un code 301 ([R = 301]), le résultat est que le navigateur fait 2 requêtes HTTP au lieu de 1, et le second finit par être un 404 (mais je reçois toujours le code HTML désiré dans le corps de la réponse!). Je suis confus!!!

+0

Vous pouvez obtenir de meilleures réponses à: http://webmasters.stackexchange.com/ –

+0

Il semble que votre script PHP a un appel à 'header()' quelque part qui renvoie une réponse 404. Quel genre de choses faites-vous dans 'mystery_file.php'? –

+0

Vous pourriez être sur quelque chose, Tim. Mes fichiers PHP utilisent un CMS pour interroger le contenu de la page stocké dans une base de données. Je n'ai pas écrit le CMS, donc il pourrait envoyer un en-tête 404 quelque part dans le code mais ne pas en sortir. Comme test, j'ai ajouté une page PHP qui ne faisait pas d'interrogation backend, juste quelques lignes de code simple. Puis j'ai demandé cette page avec une extension .htm, j'ai récupéré le bon contenu généré par PHP, et pas le 404 cette fois-ci. – William

Répondre

1

Résolu. Le logiciel CMS envoyait un en-tête 404 en raison d'une erreur dans le code de la page. Une fois que j'ai résolu cela, j'ai arrêté d'obtenir un code 404 dans l'en-tête de réponse.

+0

Vous voudrez peut-être marquer votre réponse comme correcte alors. Ajouter le nom du CMS comme une balise sur la question est également une bonne idée, car cela aide les gens à trouver les questions appropriées lorsqu'ils cherchent des réponses plus tard. –

Questions connexes