2009-03-25 8 views
3

Je suis actuellement en utilisant les règles suivantes dans un fichier .htaccess:URL Rewriting - Rediriger sans extension de fichier

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

Cela fonctionne bien pour veiller à ce que /myfile.php fonctionne aussi bien que juste myfile (sans extension dans le URL). Il gère également les querystrings sans problèmes, donc myfile?var=foo fonctionne également.

Le problème est qu'ils s'inscrivent dans Google Analytics en tant que deux fichiers distincts. Donc, alors que myfile.php pourrait être la troisième page la plus populaire sur mon site, avec des visites X, myfile pourrait être la cinquième page la plus populaire sur mon site avec des visites Y.

Comment est-ce que je peux faire une redirection dure, plutôt que "accepter l'un de" type de règle?

Répondre

2

Essayez cette règle pour rediriger les requêtes pour .php fichiers:

RewriteCond %{THE_REQUEST} ^GET\ /(([^/?]*/)*[^/?]+)\.php 
RewriteRule ^.+\.php$ /%1 [L,R=301] 
+0

Je a ajouté entre les première et deuxième lignes. Il semble n'avoir aucun effet. –

+0

Donc, si vous demandez "/foo/bar.php" vous n'êtes pas redirigé vers "/ foo/bar"? – Gumbo

+0

Non, il est toujours en train de charger /foo/bar.php J'ai également dû déplacer le support de fermeture, car il supprimait un répertoire lorsqu'il était utilisé dans certains dossiers. –

2

Pourriez-vous changer simplement votre dernière RewriteRule pour ce faire?

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

Cela redirigera "myfile" vers "myfile.php".

De plus, vous pouvez également ajuster cela à l'intérieur de Google Analytics en utilisant des règles. Bien que ce n'est probablement pas une solution idéale.

ETA: Si vous voulez myfile.php rediriger vers monfichier, essayez ceci pour votre dernière règle à la place:

RewriteRule ^(.+)\.php$ $1 [L,R=301] 
+0

Cela rend la page .php rester comme .php. La page sans extension va de: http: // localhost/2008/about/management à http: // localhost/C:/Programme% 20Files/Apache% 20Group/Apache2/htdocs/2008/about/management. php –

+0

N'est-ce pas ce que vous cherchiez? Ou voulez-vous que "myfile.php" redirige juste vers "myfile"? –

+0

Oui, myfile.php à myfile ... mais il ne devrait pas être ajouté dans C:/Program Files etc etc dans mon URL. Cela crée un chemin invalide. –

0

m'a pris quelques heures ... mais je crois que je l'ai enfin trouvé la répondre.

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

// Add This 
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(([^/]+/)*[^.]+)\.php /$1 [R=301,L] 

trouvés ici: http://www.webmasterworld.com/apache/3961636.htm

Questions connexes