Seite 1 von 1

Mod Rewrite Problem mit Dateiendung

Verfasst: 21.09.2008, 16:15
von Stylesclash
Ich habe ein Problem dass ich unbedingt lösen muss, um keinen Duplicate Content zu erhalten.

Ich habe einige selbsterstelle statische Seiten (mit HTML aber als .php Dateien gespeichert) auf meinen Webspace hochgeladen, auf dem Webspace liegt Wordpress und diese statischen Seiten habe ich in einen Unterordner hochgeladen. In den Unterordner habe ich eine htaccess gelegt und schon folgendes mit dieser erreicht.

domain.de/unterordner/index.php --> domain.de/unterordner/index/
domain.de/unterordner/index --> domain.de/unterordner/index/
domain.de/unterordner/index/ --> domain.de/unterordner/index/

domain.de/unterordner/index.php/ --> domain.de/unterordner/index.php/

Also die ersten drei Sachen zeigen alle auf die von mir ausgewählte Schreibweise, nur die letzte (Dateiname mit abschließendem Slash) wird noch nicht weitergeleitet und ich weiss nicht mehr weiter, wie ich es schaffen soll, dass auch dies auf meine gewünschte Schreibweise weiterleitet, so dass es keinen Duplicate Content gibt bzw. eine Datei unter zwei URLs zu erreichen ust.

Natürlich ist index.php nur ein Beispiel und es sollte für alle Dateien so gemacht werden, da ja sonst eine Datei unter zwei URLs verfügbar sind und so Duplicate Content beinhaltet.

Meine Htaccess sieht folgendermaßen aus:

Code: Alles auswählen

RewriteEngine on 

RewriteCond %{HTTP_HOST} !^www\.domain\.de\ 

RewriteRule ^(.*)$ http://www.domain.de/unterordner/$1 [L,R=301,NC] 
RewriteRule ^([^.]+)\.php$ /unterordner/$1/ [R=301,L,NC] 

Redirect 301 http://www.domain.de/unterordner/ http://www.domain.de/unterordner/index/ 

ErrorDocument 404 /unterordner/404.php

Verfasst:
von

Re: Mod Rewrite Problem mit Dateiendung

Verfasst: 21.09.2008, 16:54
von Mork vom Ork
Stylesclash hat geschrieben:domain.de/unterordner/index.php --> domain.de/unterordner/index/
domain.de/unterordner/index --> domain.de/unterordner/index/
domain.de/unterordner/index/ --> domain.de/unterordner/index/

domain.de/unterordner/index.php/ --> domain.de/unterordner/index.php/
Ich verstehe momentan den Sinn der Aktion nicht. Warum lässt du die Seite nicht einfach unter ihrem ursprünglichen Dateinamen stehen, was ist so schlimm an /unterordner/bla.php? Oder andersrum: Wenn du die Seiten gerne als Verzeichnis-URL haben möchtest, warum lädst du sie nicht einfach gleich als Verzeichnis hoch? Du versucht anscheinend von hinten durch die Brust ins Auge zu zielen. mod_rewrite ist für sowas fehl am Platze und schafft nur Fehlerquellen.
Natürlich ist index.php nur ein Beispiel und es sollte für alle Dateien so gemacht werden, da ja sonst eine Datei unter zwei URLs verfügbar sind und so Duplicate Content beinhaltet.
Duplicate Content ist der Schwarze Mann der Webseitenbetreiber - alle gruseln sich wegen nix.

Re: Mod Rewrite Problem mit Dateiendung

Verfasst: 22.09.2008, 11:23
von Stylesclash
Mork vom Ork hat geschrieben: Ich verstehe momentan den Sinn der Aktion nicht. Warum lässt du die Seite nicht einfach unter ihrem ursprünglichen Dateinamen stehen, was ist so schlimm an /unterordner/bla.php? Oder andersrum: Wenn du die Seiten gerne als Verzeichnis-URL haben möchtest, warum lädst du sie nicht einfach gleich als Verzeichnis hoch? Du versucht anscheinend von hinten durch die Brust ins Auge zu zielen. mod_rewrite ist für sowas fehl am Platze und schafft nur Fehlerquellen.
Als Verzeichnis hochladen, also immer ein Verzeichnis erstellen und dann index.php oder wie?

Ich dachte dies wäre kein großes Problem, da ich ja in meinen Augen 3 der 4 Möglichkeiten weitergeleitet habe, nur halt die datei.php/ nicht, da irgendwie der hintere Slash in Verbindung mit dem .php zu Komplikationen führt.

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Re: Mod Rewrite Problem mit Dateiendung

Verfasst: 22.09.2008, 18:45
von Mork vom Ork
Stylesclash hat geschrieben:Als Verzeichnis hochladen, also immer ein Verzeichnis erstellen und dann index.php oder wie?
Ja. Die Weiterleitung von /fasel nach /fasel/ übernimmt der Server ganz alleine, und auf /fasel/index.bla, geschweige denn /fasel/index.bla/ musst du ja nicht verweisen, dann taucht die URL auch nirgends auf.
Ich dachte dies wäre kein großes Problem
Es ist unnötiger Aufwand. Zudem müsstest du den Kram doch wieder umbauen, falls du irgendwann mal wirklich Unterverzeichnisse benötigst.
Ich rate davon ab, Sachen nachzubauen, die der Webserver schon von Haus aus kann und auch einfacher umsetzt. Nicht, dass ich etwas dagegen hätte, Anfragen an /index.bla nach / umzuleiten, ich mache das selbst, aber der Nutzen ist rein kosmetischer Natur, und du setzt mit dem Vorgaukeln von Verzeichnissen ja noch einen oben drauf.

Nichtsdestotrotz, in /fasel/.htaccess:

RewriteEngine on
RewriteBase /fasel/

RewriteCond %{THE_REQUEST} " /fasel/([a-z0-9_-]+)(\.php/?)? "
RewriteRule . %1/ [R=301,L]

RewriteRule ^([a-z0-9_-]+)/$ $1.php [L]

Der erste Block schaltet mod_rewrite ein und setzt das Basisverzeichnis.
Der zweite Block greift alle Anfragen nach /fasel/bla, /fasel/bla.php und /fasel/bla.php/ und leitet sie extern an /fasel/bla/ weiter.
Der dritte Block letztlich sorgt dafür das bei Anfragen an bla/ das Skript bla.php aufgerufen wird.
Beachte, dass du an zwei Stellen, in Zeile 2 und 4, den Platzhalter fasel in den Namen deines Verzeichnisses abändern musst.

Die Prüfung im zweiten Block über THE_REQUEST, das ist die Anfragezeile, die der Browser schickt, ist notwendig, weil alle anderen Möglichkeiten, auf die URI zuzugreifen, von der Umschreiberei betroffen sind. Nachdem der dritte Block die URI in bla.php umgewandelt hat, wird eine neue, interne Anfrage gestartet, die den gesamten Prozess nochmals durchläuft. Diese interne Anfrage läuft mit der URI bla.php, so dass der erste Block wieder extern nach bla/ umleiten würde, täte er lediglich mittels RewriteRule prüfen. Diese Endlosschleife lässt sich nur verhindern, indem man die originale Anfrage des Browsers prüft, d.h. die Variable THE_REQUEST, denn diese bleibt unverändert.

Verfasst: 24.09.2008, 19:09
von Stylesclash
Super danke, jetzt verweist alles wie gewollt auf "datei.php/"...

Nur wie bekomme ich jetzt auch noch hin, dass gleichzeitig alle Anfragen ein www. vor die Domain bekommen?

Verfasst: 24.09.2008, 19:26
von Mork vom Ork
Stylesclash hat geschrieben:Nur wie bekomme ich jetzt auch noch hin, dass gleichzeitig alle Anfragen ein www. vor die Domain bekommen?
Das Übliche, allerdings in der obersten .htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=301,L]