2009-03-25 5 views
3

Ich bin derzeit die folgenden Regeln in einer .htaccess-Datei mit:URL-Rewriting - Redirect ohne Dateierweiterung

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

Dies funktioniert gut, um sicherzustellen, dass /myfile.php Werke sowie nur myfile (ohne Erweiterung in der URL). Es behandelt auch Querystrings ohne Probleme, so myfile?var=foo funktioniert auch.

Das Problem ist, dass diese in Google Analytics als zwei separate Dateien registriert sind. Also, während möglicherweise die drittbeliebteste Seite auf meiner Website ist, mit X Besuche, myfile könnte die fünft beliebtesten Seite auf meiner Website mit Y Besuche sein.

Wie kann ich eine harte Umleitung durchführen, anstatt "eine der beiden" Regeln zu akzeptieren?

Antwort

2

diese Regel versuchen Anfragen nach .php Dateien zu umleiten:

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

ich das zwischen den ersten und zweiten Leitungen in dem Nachspiel setzen könnte. Es scheint keine Wirkung zu haben. –

+0

Wenn Sie also "/foo/bar.php" anfordern, werden Sie nicht zu "/ foo/bar" weitergeleitet? – Gumbo

+0

Nein, es wird immer noch loading /foo/bar.php Ich musste auch die schließende Klammer verschieben, da es ein Verzeichnis ausschneiden würde, wenn es in bestimmten Ordnern verwendet wird. –

2

Könnten Sie Ihre letzte RewriteRule, dies zu tun ändern?

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

Das wird "myfile" zu "myfile.php" umleiten.

Sie können dies auch innerhalb von Google Analytics mithilfe von Regeln anpassen. Obwohl das wahrscheinlich keine ideale Lösung ist.

ETA: Wenn Sie myfile.php umleiten myfile wollen, versuchen Sie diese stattdessen für Ihre letzte Regel:

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

Dadurch bleibt die .php-Seite als .php erhalten. Die Seite ohne Erweiterung geht von: http: // localhost/2008/about/management bis http: // localhost/C:/Programm% 20Files/Apache% 20Group/Apache2/htdocs/2008/about/management. php –

+0

Ist das nicht das, wonach Sie gesucht haben? Oder wollten Sie "myfile.php" auf "myfile" umleiten? –

+0

Ja, myfile.php in myfile ... aber es sollte nicht in C:/Programme usw. in meine URL eingefügt werden. Das erstellt einen ungültigen Pfad. –

0

hat mich ein paar Stunden ... aber ich glaube, ich endlich das gefunden haben, Antworten.

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

hier gefunden: http://www.webmasterworld.com/apache/3961636.htm