Supprimer l'extension .php et rendre accessible .php ?

WRInaute discret
Bonjour à tous,

J'utilise un .htaccess afin de pouvoir rendre accessible mes pages sans l'extension .php. Par exemple :

la page file.php est accessible avec :
http://www.domain.com/file et http://www.domain.com/file.php.
Ce qui me convient.

Toutefois, au niveau du référencent, j'ai entendu quelque part que ce n'était pas bien de rendre les pages accessibles de deux manières différentes et qu'il était préférable de supprimer soit l'une manière, soit l'autre...

J'aimerais avoir votre avis la-dessus. Si ma page file.php est accessible avec ET sans l'extension .php, cela va t'il influencer mon référencement ?


Merci à vous.
Cordialement.
 
WRInaute accro
Bonjour
Ce qu'il ne faut pas, c'est que les moteurs indexent les deux versions de tes URL.
Si le site n'est pas encore indexé, tu peux faire ce que tu veux. A moins qu'un jour quelqu'un s'amuse à mettre des liens vers tes url.php, elles ne seront pas indexées.

Si par contre tes url.php sont déjà indexées et que tu diffuses de nouvelles URL, oui tu auras un problème de duplicate content, qu'il te faudra résoudre par la mise en place de redirections 301 url.php -> url

Ceci dit, par sécurité, tu peux aussi mettre en place ces redirections.
 
WRInaute discret
Merci de ta réponse nickargall,
Je comprend mieux désormais et en effet, aucune page n'est encore indéxée puisque je travaille encore le site en local.

J'utilise le code suivant :

Code:
Options +FollowSymlinks
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
RewriteCond %{HTTP_HOST} www.domain.com
RewriteRule (.*) http://domain.com$1 [L,R=301]

Les deux premiers RewriteCond sont pour permettre des urls sans .php et le second pour rediriger les http://domain.com vers http://www.domain.com

Que faut t'il modifier pour que les url.php redirigent automatiquement vers url

En faisant ainsi, cela m'assure que toutes les pages indexées contiendront le sous-domaine www. et n'aurons pas l'extension .php c'est bien ça ?

Merci encore.
 
WRInaute accro
ta deuxième rewrite rule fait l'inverse en fait; elle redirige toute url appelée sur www. vers la même url sans www.
pour faire l'inverse, tu peux mettre
Code:
RewriteCond %{HTTP_HOST} !www.domain.com
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]
Pour effectuer l'autre redirection souhaitée, tu peux essayer ça
Code:
RewriteRule ^(.*)\.php$ /$1 [L,R=301]

soit, en tout et dans l'ordre (redirections avant),
Code:
Options +FollowSymlinks
RewriteEngine on 

####redirection du domaine
RewriteCond %{HTTP_HOST} !www.domain.com
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]

##redirection avec PHP vers sans PHP
RewriteRule ^(.*)\.php$ /$1 [L,R=301]

##reecriture adresse 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php
 
WRInaute discret
Merci encore de ta réponse nickargall.

Pour le rewriting www., est-tu sûre ? Car j'ai mis ca sur mon serveur et lorsque j'entre http://site.com ca me redirige vers http://www.site.com et l'inverse ne marche pas.

Conçernant la redirection pour les .php, est t'il possible de rajouter un nom de dossier dans la RewriteRule car je teste ça en local et l'url du site est : http://localhost/site/

Merci encore.
Cordialement.
 
WRInaute accro
Ta première règle faisant "avec www" vers "sans www"
dans ton message du demandais confirmation de l'inverse, je t'ai donc mis la règle qui fait "sans www" vers "www"
Après, tu prends celle que tu veux

Pour ajouter un dossier, oui, dans les règles de redirections, tu peux ajouter des répertoires
exemple
Code:
RewriteRule ^(.*)\.php$ /site/$1 [L,R=301]
 
WRInaute discret
Oui, nos codes doivent être identiques puisque avec mon code ca redirige bien sans www vers www.
...

Et en utilisant

Code:
RewriteRule ^(.*)\.php$ /site/$1 [L,R=301]

j'ai une erreur :

Cette page Web présente une boucle de redirection.

Je remet mon code complet :

Code:
Options +FollowSymlinks
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

RewriteRule ^(.*)\.php$ /site/$1 [L,R=301]

ErrorDocument 404 http://localhost/site/erreur

Merci encore pour votre aide.
Cordialement.
 
WRInaute accro
Et en mettant la redirection avant la réécriture ?

Code:
Options +FollowSymlinks
RewriteEngine on 


RewriteRule ^(.*)\.php$ /site/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php


ErrorDocument 404 http://localhost/site/erreur
 
WRInaute discret
Merci encore de votre réponse.

Non, j'ai toujours la même erreur :

Cette page Web présente une boucle de redirection.

Merci encore.
 
WRInaute discret
En cherchant un peu partout et en bidoullant, je suis tombé sur un truc qui marche super bien.
Dès que je tape l'url avec un ".php" à la fin, ca ma redirige vers la même page sans ".php"

Voici le code :

Code:
Options +FollowSymlinks
RewriteEngine on 

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /site/$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /site/$1.php [L]

Mais du coup, je me demandais si ce n'est pas mieux de faire comme beaucoup de gros sites, des pages seulement accessibles sans extension et lorsque je rajoute l'extension ".php", au lieu de me rediriger vers la page sans extension, cela me met la page d'erreur. Je pense que c'est mieux niveau référencement en plus.

Nickargall, sauriez-vous comment modifier mon code pour rediriger les .php vers la page d'erreur ?

Merci encore pour votre aide.
Cordialement.
 
WRInaute accro
? pourquoi rediriger vers une page d'erreur ? Tu peux laisser comme ça, si ça redirige en 301, c'est très bien pour ton référencement. Et encore une fois, vu que le site n'était pas encore indexé avec ses URL en .php, cette redirection est vraiment au cas ou, elle n'a pas beaucoup d'intérêt.
 
WRInaute discret
Oui c'est vrai tu as raison, ce serait créer des pages d'erreur pour rien ! Et en effet, le site n'est même pas encore en ligne, toutes les URL sur le site seront sous la forme "www.site.com/page" donc vu que les pages deviendront faciles à mémoriser, un utilisateur qui se trompe en rajoutant un .php ou met sans "www.", la redirection 301 sera la pour ça.

J'ai repéré une dernière petite erreur, c'est que lorsque j'ajoute un "/" à la fin d'une url, par exemple : site/page/
Je reçois une erreur de type :

Code:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Apparement, la redirection en prend pas en compte les slashs à la fin de l'url...
Aurais-tu un moyen pour réparer cela ? Cela doit certainement être un petit quelque chose à modifier dans le .htaccess mais je ne vois pas quoi.

Je remet mon .htaccess ici :

Code:
Options +FollowSymlinks
RewriteEngine on 

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /site/$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /site/$1.php [L]

RewriteCond %{HTTP_HOST} www.site.fr
RewriteRule (.*) http://site.fr$1 [L,R=301]

ErrorDocument 404 http://localhost/site/erreur

Merci encore infiniment pour ces conseils.
 
WRInaute discret
EDIT :

J'ai aussi un gros bug après cette redirection .php, je ne peux plus rien faire sur mon site c'est à dire que lorsque je veux me connecter en utilisant le formulaire de connexion, rien ne se passe, pareil pour l'inscription etc...
Je pense qu'il serait judicieux de l'enlever non ? Mais j'ai peur du duplicate content si je permet que les pages soient accessibles autant en .php que sans l'extension .php... Dans ce cas, il faudrait faire des pages d'erreur pour les .php dans ce cas..


Probleme résolu.

Je met le nouveau code que j'utilise :

Code:
Options +FollowSymlinks
RewriteEngine on 

# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/site/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://localhost/site/$1 [R=301,L]

# Resolve .php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

RewriteCond %{HTTP_HOST} www.site.com
RewriteRule (.*) http://site.com$1 [L,R=301]

ErrorDocument 404 http://localhost/site/erreur

Apparemment le code sous "# Unless directory, remove trailing slash" à permis d'éliminer mon problème puisqu'il fait une redirection directement si il y a un / a la fin d'une url.

Une dernière et dernière question avant de classer ce topic parmi les topics résolus :

Est-ce-que le code ci-dessus est bien pour mon référencement (oui je sais, je prend ça trop à coeur). C'est à dire :

- Si il y a un slash a la fin de l'url, redirection 301 pour enlever le slash
- Si il y a une extension .php a la fin de l'url, redirection 301 pour enlever l'extension
- Si il n'y a pas de www., redirection 301 pour ajouter le www.

Merci encore pour votre aide.
Cordialement.
 
Discussions similaires
Haut