Seite 1 von 1

301 Weiterleitung per htaccess

Verfasst: 20.06.2006, 17:35
von muden
Moin moin!

Stecke bei folgendem Problem fest:
Habe doppelten Content, welchen ich per mod_rewrite verhindern will.
Ich bin unter 1. emude.de/verzeichnisse und 2.emude.de/verzeichnisse/ erreichbar.
Nun sollen alle Verzeichnisendungen OHNE / zu denen MIT / am Ende der url per 301 weitergeleitet werden. Außerdem sollen www.emude.de/*.html zu emude.de/*.html weitergeleitet werden, sowie www.emude.de/verzeichnis/*.html zu emude.de/verzeichnis/*.html. Die Probleme sind also 1. die slashs am Verzeichnisnamenende und 2. das entfernen aller www's per 301.Habe es geschafft, von www.emude.de und www.emude.de/ auf emude.de/ weiterzuleiten. Meine htaccess sieht wie folgt aus:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php

# Von www.* auf * umleiten
RewriteCond %{HTTP_HOST} ^www\.emude\.de$ [NC]
RewriteRule ^(.*)$ https://emude.de/$1 [L,R=301]

# Spambots nach User_agent aussperren

RewriteCond %{HTTP_USER_AGENT} ^.*Whacker.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FileHound.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*TurnitinBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*JoBo.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*adressendeutschland.*$
RewriteRule ^.* - [F]


Ich komme mit den "regulären Ausdrücken nicht klar und bin für jeden Tip dankbar!!

Viele Grüße aus Hamburg, Dirk

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Re: 301 Weiterleitung per htaccess

Verfasst: 20.06.2006, 18:45
von haha
muden hat geschrieben:Nun sollen alle Verzeichnisendungen OHNE / zu denen MIT / am Ende der url per 301 weitergeleitet werden.
Das passiert automatisch (sofern es sich um reale Verzeichnisse handelt).
Außerdem sollen www.emude.de/*.html zu emude.de/*.html weitergeleitet werden, sowie www.emude.de/verzeichnis/*.html zu emude.de/verzeichnis/*.html.
Das hast Du mit …
# Von www.* auf * umleiten
RewriteCond %{HTTP_HOST} ^www\.emude\.de$ [NC]
RewriteRule ^(.*)$ https://emude.de/$1 [L,R=301]
…schon drin.

Jetzt die große Frage: Wo ist Dein Problem? :)

Nur am Rande:
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php
Diese Aktion ist extrem unklug. Jedes Objekt, das bei Dir nicht existiert (und auf das Muster passt), wird ohne weiteren Kommentar mit der Startseite, genauer gesagt mit dem Inhalt der Startseite beantwortet. Damit verwirrst Du erstens die Besucher, weil die nicht auf ihren Fehler hingewiesen werden, und zweitens "produzierst" Du unendlich viele Seiten auf Deinem Server, weil Du auch Robots nicht auf fehlerhafte URLs hinweist.
Nimm' diesen groben Unfug lieber raus und benutze eine vernünftige Fehlerseite - spricht ja nichts dagegen, dass Du dort neben der freundlichen Fehlermeldung auf wichtige Seiten hinweist.

Verfasst: 20.06.2006, 19:45
von muden
Puh...diese Sachen die Du für nachteilig hältst benötige ich für joomla, zum generieren sumafreundlicher urls. Und wenn ich zusätzlich noch Fehlerdokumente einbaue?Also das Problem ist daß es nicht funktioniert...nur im Hauptverzeichnis, nicht in den Unterverzeichnissen. :o

Verfasst:
von

Verfasst: 20.06.2006, 19:46
von muden
Ach.. es handelt sich NICHT um relae Verzeichnisse!! :idea: Es sind welche die von mod_rewrite gemacht wurden..

Verfasst: 20.06.2006, 21:32
von haha
Nun sollen alle Verzeichnisendungen OHNE / zu denen MIT / am Ende der url per 301 weitergeleitet werden.

Ach.. es handelt sich NICHT um relae Verzeichnisse!! Es sind welche die von mod_rewrite gemacht wurden..
Also von mod_rewrite wurden die nicht gemacht, jedenfalls nicht in der .htaccess, die Du zitiert hast. Du meinst vermutlich für mod_rewrite, nicht durcheinander bringen.

Wie dem auch sei, grundsätzlich solltest Du Verweise auf solche Verzeichnisse so ausgeben, dass sie immer einen Schrägstrich am Ende haben. Für die Leute, die den Schrägstrich beim Eintippen vergessen, reicht folgende Zeile:

RewriteRule ^((.+/|)[^./]+)$ $1/ [L,R=301]

[^./]+$ greift den Teil am Ende ($) des Pfades ab, der weder (^) einen Punkt noch einen Schrägstrich enthält ([^./]), es muss dabei mindestens ein Zeichen vorhanden sein (+).

Da wir den kompletten Pfad weiterleiten wollen und nicht nur den letzten Buchstaben, sitzt davor noch ^(.+/|). Dieser Teil verlangt, dass vom Anfang (^) bis zum eben schon abgegriffenen Pfadende entweder irgendwas mit einem Schrägstrich am Ende kommt (.+/) oder (|) gar nichts (das Nichts zwischen | und ) ). Die runden Klammern begrenzen den Bereich, in dem das Oder (|) wirkt.
Dadurch, dass dieser Teil mit einem Schrägstrich enden oder leer sein muss, und gleichzeitig im anderen Teil am Ende kein Schrägstrich mehr kommen darf, teilen wir die URL in Verzeichnispfad und Objektname auf.

Das trifft dann auf "bla" zu (Anfang, nichts, Teil-ohne-Punkt-und-Schrägstrich ("bla"), Ende) wie auch auf "bla/fasel" oder "bla/blo/fasel" (Anfang, Irgendwas-mit-Schrägstrich-am-Ende ("bla/" bzw. "bla/blo/"), Teil-ohne-Punkt-und-Schrägstrich ("fasel"), Ende).

Das zusätzliche Klammerpaar nimmt den kompletten Pfad auf, damit wir ihn in die neue URL per $1 einfügen können. Du könntest, nebenbei bemerkt, das zweite Klammerpaar (das das Oder begrenzt) mit $2 einfügen, aber das macht natürlich keinen Sinn.

Verfasst: 21.06.2006, 13:53
von muden
Moin!

vielen Dank für Deine Hilfe, es hat geklappt!! Aber reguläre Ausdrücke finde ich echt schwierig, hoffe daß ich da nochmal durchsteige. Zum Beispiel würde ich gern selbst ergründen können warum folgendes keinen Sinn macht: "Du könntest, nebenbei bemerkt, das zweite Klammerpaar (das das Oder begrenzt) mit $2 einfügen, aber das macht natürlich keinen Sinn."

danke und viele Grüße...
Dirk

Verfasst: 21.06.2006, 17:08
von haha
muden hat geschrieben:Zum Beispiel würde ich gern selbst ergründen können warum folgendes keinen Sinn macht: "Du könntest, nebenbei bemerkt, das zweite Klammerpaar (das das Oder begrenzt) mit $2 einfügen, aber das macht natürlich keinen Sinn."
Da siehst Du den Wald vor lauter Bäumen nicht :) Es macht einfach keinen Sinn für Deinen gegebenen Anwendungszweck. Die erste, äußere Klammer umfasst bereits den gesamten Pfad. Da wir nicht mehr brauchen, macht es in diesem Fall keinen Sinn, auch noch den Inhalt der zweiten, inneren Klammer in die neue URL einzubauen.
Zerlegst Du "bla/fasel", kommt mittels der Vorlage $1/ der Pfad "bla/fasel/" raus, exakt das, was Du wolltest. Man könnte (!) zum Beispiel auch $1/?$2 benutzen, dann erhält man "bla/fasel/?bla/" - aber das macht halt keinen Sinn.

Ich wollte mit der Anmerkung nur darauf hinweisen, dass runde Klammern zweierlei Funktion haben: Erstens greifen sie Textteile heraus, so dass man sie mit $1 bis $9 wiederverwenden kann, zweitens gruppieren sie aber auch die Musterteile und grenzen sie gegen andere ab, wie hier zum Beispiel um ein Oder herum.