Bonjour à tous.

Je vois ce matin que mes pages s'affichent, que je tape ou non l'extension .php.
Par exemple : http://corrigeur.fr/prestations/correction.php affichera la même page si on tape sans mettre le .php. Du coup ça fait des duplicates.

De quoi cela peut-il venir ?

Merci pour vos explications.
Modifié par Pyanepsion (04 Oct 2012 - 13:02)
C'est ce que j'avais d'abord pensé, mais je ne vois pas quoi :


# @version 1.0 créé le 19-07-2011
# @Copyright : © 2012 Le Corrigeur™, l'expert de la correction de l'orthographe.
# @Right : Tous les contenus du site corrigeur.fr sont placés sous la législation du copyright européen.
# @Conformity : Ce site s'appuie sur le HTML 5 et le CSS 3.

SetEnv PHP_VER 5_3
SetEnv REGISTER_GLOBALS 0
AddDefaultCharset UTF-8

# Éviter les appels système supplémentaires pour vérifier la présence de liens symboliques
# La ligne suivante doit être mise en commentaires si elle génère des erreurs
Options +FollowSymLinks

# Activation de la réécriture des URL.
RewriteEngine on
RewriteCond %{HTTP_HOST}  www.monsite.fr
 
RewriteRule (.*)  http://monsite.fr/$1  [L,R=301]

########## Begin - Règles de réécriture pour bloquer certains exploits communs
# Blocage de n'importe quel scénario essayant de mettre une valeur de mosConfig à travers l'URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Blocage de n'importe quel essai de scénario frauduleux envoyé en base 64 à travers l'URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Blocage de n'importe quel scénario essayant d'inclure une balise <script> à travers l'URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Blocage de n'importe quel scénario essayant de fixer une variable PHP globales à travers l'URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Blocage de n'importe quel scénario essayant de modifier une variable _REQUEST à travers l'URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Rediriger toutes les erreurs d'interdiction 403 sur la page d'erreur dédiée
RewriteRule ^(.*)$ /gestion/403.php [F,L]
########## End - Règles de réécriture pour bloquer certains exploits communs

# Interdiction du listage des répertoires
Options -Indexes
# Redirection des erreurs
ErrorDocument 404 /gestion/404.php
ErrorDocument 403 /gestion/403.php
ErrorDocument 500 /gestion/500.php

# Ajout des types MIME vidéos
AddType video/ogg  .ogv
AddType video/mp4  .mp4
AddType video/webm .webm

# BEGIN Expire headers
<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresDefault "access plus 7200 seconds"
 ExpiresByType image/jpg "access plus 604800 seconds"
 ExpiresByType image/jpeg "access plus 604800 seconds"
 ExpiresByType image/png "access plus 604800 seconds"
 ExpiresByType image/gif "access plus 604800 seconds"
 AddType image/x-icon .ico
 ExpiresByType image/ico "access plus 604800 seconds"
 ExpiresByType image/icon "access plus 604800 seconds"
 ExpiresByType image/x-icon "access plus 604800 seconds"
 ExpiresByType text/css "access plus 604800 seconds"
 ExpiresByType text/javascript "access plus 604800 seconds"
 ExpiresByType text/html "access plus 7200 seconds"
 ExpiresByType application/xhtml+xml "access plus 7200 seconds"
 ExpiresByType application/javascript "access plus 604800 seconds"
 ExpiresByType application/x-javascript "access plus 604800 seconds"
 ExpiresByType application/x-shockwave-flash "access plus 604800 seconds"
</IfModule>
# END Expire headers

# Compression
# Activer le filtre Apache 2.0
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/xml application/x-javascript text/xml application/xhtml+xml text/plain application/javascript text/css

# Certains navigateurs ont des problèmes avec gzip, d'où les exceptions
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Les images n'ont pas besoin d'êtres compressées puisqu'elles le sont déjà (jpg, gif...)
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Pour les proxy
Header append Vary User-Agent env=!dont-vary

# protection du fichier htaccess
<files .htaccess>
order allow,deny
deny from all
</files>

Modifié par Pyanepsion (04 Oct 2012 - 13:46)
en effet, tu as une procédure particulière pour afficher tes pages? (includes, etc...)
Par défaut ça fait la même chose sous WAMP. Mais je n'ai jamais trouvé de quel paramètre ça vient.
J'utilise des includes, mais uniquement dans les pages elles-mêmes. Chaque page est de la forme :

include 1 (header)
include 2 (début de body)
contenu particulier
include 3 (menu latéral)
include 4 (bas de page)
Cela ne vient pas du .htaccess puisque le problème persiste si on supprime le fichier.
Cela ne vient pas non plus du fichier puisque j'ai alors testé avec un fichier vide ne comportant que le code suivant, et cela persiste encore.

<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>test</title>
	<meta name="description" content="test" />
	<meta name="keywords" lang="fr" content="test" />
	<meta name="robots" content="noindex, follow" />
</head>
<body>
test
</body>
</html>

Je suis chez OVH. Serait-ce un problème particulier du serveur ?
Modifié par Pyanepsion (05 Oct 2012 - 06:26)
Pas un soucis au niveau du cache ou il irait chercher des anciennes pages avec d'anciens noms et extensions ? Ou coté serveur de l'interprétation du PHP ?
Il semblerait que le problème vienne de l'hébergement et pourrait se corriger par la commande .htaccess :
options -multiviews

Ne voulant pas perturber le débogage, dans l'immédiat j'ai écrit sur toutes les pages :
$url=$_SERVER['REQUEST_URI'];if(substr($url, -4,
 4)!='.php'){header('Location: '.$url.'.php');exit();}
Réponse de OVH :

"OVH" a écrit :
Cette configuration est valable pour tous les serveurs mutualisés.
Il s'agit de notre configuration par défaut.

Pour désactiver cela en effet il vous faut bien mettre l'option "Options -Multiviews" dans un fichier .htaccess.
Il s'agit de la seule solution.


En fait non :
cette commande .htaccess différencie les adresses avec et sans l'extension .php. Pour rediriger la page lorsque l'extension a été omise, il faut utiliser la routine PHP ci-dessus.