Ordner aus URL eliminieren

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

Ordner aus URL eliminieren

Beitragvon krabbe » 31.01.2010 18:38

Ich leg mir gerade die Karten.
Ich möchte aus einer URL example.de/ordner/unterordner den ordner entfernen, so dass die URL permanent umgeleitet wird auf example.de/unterordner

Meine htaccess-Datei im root der Domain sieht so aus:
Code: Alles auswählen
  RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
  RewriteRule ^(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteRule ^ordner/(.*)$ /$1 [R=301,L]

Die ersten beiden Zeilen tun was sie sollen, die dritte Zeile aber nicht. Wo ist der Fehler?
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon mapero » 03.02.2010 09:39

Ich bin zwar kein Profi.

Aber ich vermute das [L] in der 1ten Regel verhindert die Ausführung der 2ten Regel:

[L] Last | Bearbeitung abschliessen, keine weiteren Regeln anwenden.


Probier es mal so:
Code: Alles auswählen
  RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
  RewriteRule ^(.*)$ http://example.de/$1 [R=301]

  RewriteRule ^ordner/(.*)$ /$1 [R=301,L]
mapero
.
.
 
Beiträge: 4
Registriert: 03.02.2010 09:13

Beitragvon krabbe » 03.02.2010 11:59

Danke für den Tipp, das hatte ich übersehen.
Nur, wenn ich das [L] rausnehme, funktioniert die ganze Seite nicht mehr.

Also ist die zweite RewriteRule falsch.
Ich hab sie jetzt erstmal ganz rausgenommen.

Vielleicht hat ja jemand noch nen Tipp...
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon mapero » 03.02.2010 13:03

Probier mal den / vor dem $1 weg zu lassen.

Bin leider auch nicht so bewandert mit modrewrite.
mapero
.
.
 
Beiträge: 4
Registriert: 03.02.2010 09:13

Beitragvon krabbe » 03.02.2010 13:42

Das war's leider auch nicht.

Das [L] am Ende der ersten Regel muss meiner Meinung nach drin bleiben, da sonst die Condition doch auch für die zweite Regel gilt, oder?

Auf jeden Fall, mit [L] tut sich nix, ohne [L] läd die Seite ewig, die erste Regel funktioniert nicht mehr und man landet auf der 404-Seite.
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon Internetmafia » 03.02.2010 17:48

Eine Condition gilt immer nur für die nachfolgende RewriteRule.

Durch [L] beendet er die Regelbearbeitung nach der RewriteRule hinter der es steht.
Bitte beachten, wenn du einen [R] oder [R=301] verwendest, beginnt er auch mit der Regelbearbeitung wieder von vorne (dadurch entstehen oftmals Endlosschleifen :wink: )

In deinem Bespiel solltest du noch eine Regel hinzufügen, die den Aufruf example.de/unterordner intern auf example.de/ordner/unterordner umleitet, falls du die dateien auf deinem webserver nicht verschoben hast:

Code: Alles auswählen
RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
RewriteRule ^(.*)$ http://example.de/$1 [R=301]

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

RewriteRule ^unterordner/(.*)$ http://example.de/ordner/unterordner/$1 [L]


Hoffe das hilft.

Gruß Jan
Internetmafia
.
.
 
Beiträge: 24
Registriert: 27.01.2010 10:03

Beitragvon krabbe » 03.02.2010 21:05

Internetmafia hat geschrieben:In deinem Bespiel solltest du noch eine Regel hinzufügen, die den Aufruf example.de/unterordner intern auf example.de/ordner/unterordner umleitet, falls du die dateien auf deinem webserver nicht verschoben hast

Auf dem Webserver liegen die Dateien immer noch im ordner "ordner", dieser ist aber jetzt der Root von example.de
Die Weiterleitung habe ich beim Provider eingerichtet.

Es handelt sich um eine Drupal-Instalation.
Der Unterordner ist nicht Teil der Ordnerstruktur auf dem Server, sondern nur der URL.

Es gibt unterschiedliche Kategorien auf der Seite:
example.de/news
example.de/musik
usw.

Früher war die URL:
example.de/ordner/news
example.de/ordner/musik
usw.

Wenn ich es richtig verstanden habe, ist die erste Kondition nur für die erste Regel.
Damit habe ich alle Links vom www befreit.

Jetzt also ne neue Kondition (alle Anfragen an example.de/ordner/***) und ne neue Regel (dauerhaft Umleiten nach example.de/***) angelegt...

Noch jemand ne Idee?
Merci
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon Internetmafia » 04.02.2010 14:37

Hallo Krabbe,

dann sollte diese Regel eigentlich schon reichen:

Code: Alles auswählen
# Wenn Aufruf example.de/ordner/irgendwas dann dauerhaft umleiten auf example.de/irgendwas
RewriteRule ^ordner/(.*)$ http://example.de/$1 [R=301,L]


Eine Condition wird dabei nicht benötigt.

Gruß Jan
Internetmafia
.
.
 
Beiträge: 24
Registriert: 27.01.2010 10:03

Beitragvon krabbe » 05.02.2010 10:06

Internetmafia hat geschrieben:dann sollte diese Regel eigentlich schon reichen:

Tut sie leider nicht, aber zumindest zerschießt es mir nicht mehr die "normalen" Anfragen.
Aber bei Aufruf von example.de/ordner/news lande ich immer noch auf der 404-Seite und in der Adresszeile im Browser steht weiterhin der /ordner/ in der URL...

So langsam ist es mir egal. Dann landen die Leute eben auf der Fehlerseite... die ist ja auch ganz hübsch :wink:
Aber verstehen würde ich es gerne.
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon kartoffelkopf » 06.02.2010 15:17

Code: Alles auswählen
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon Internetmafia » 08.02.2010 14:36

kartoffelkopf hat geschrieben:
Code: Alles auswählen
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]


Hat es damit funktioniert?

Gruß Jan
Internetmafia
.
.
 
Beiträge: 24
Registriert: 27.01.2010 10:03

Beitragvon krabbe » 08.02.2010 14:55

Internetmafia hat geschrieben:
kartoffelkopf hat geschrieben:
Code: Alles auswählen
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]


Hat es damit funktioniert?

Gruß Jan

Nein, leider immer noch nicht... **haare rauf**
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon kartoffelkopf » 08.02.2010 17:04

krabbe hat geschrieben:
Internetmafia hat geschrieben:
kartoffelkopf hat geschrieben:
Code: Alles auswählen
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]


Hat es damit funktioniert?

Gruß Jan

Nein, leider immer noch nicht... **haare rauf**


Dann poste nochmal alle Rewrite-Rules die Du hast oder schau mal ins Accesslog des Webservers, welche Webseiten tatsaechlich aufgerufen oder nicht gefunden werden.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Beitragvon krabbe » 08.02.2010 17:22

kartoffelkopf hat geschrieben:Dann poste nochmal alle Rewrite-Rules die Du hast oder schau mal ins Accesslog des Webservers, welche Webseiten tatsaechlich aufgerufen oder nicht gefunden werden.


Hier sind sie:
Code: Alles auswählen
<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
  RewriteRule ^(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
krabbe
.
.
 
Beiträge: 11
Registriert: 31.01.2010 18:30

Beitragvon kartoffelkopf » 08.02.2010 17:48

krabbe hat geschrieben:
kartoffelkopf hat geschrieben:Dann poste nochmal alle Rewrite-Rules die Du hast oder schau mal ins Accesslog des Webservers, welche Webseiten tatsaechlich aufgerufen oder nicht gefunden werden.


Hier sind sie:
Code: Alles auswählen
<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
  RewriteRule ^(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>


Also bei mir funktioniert das ordner-Rewrite. Einige Kleinigkeiten sind noch falsch:

Code: Alles auswählen
<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
  RewriteRule ^(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
 
  RewriteCond %{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_FILENAME} !-d [OR]
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]
</IfModule>


Bei OR wird das explizite AND ausgeschlossen. Ohne dem / vor index.php gibt es Error 400 (Bad Request), wenn nicht irgendwo / als DocumentRoot definiert ist.
kartoffelkopf
.
.
 
Beiträge: 59
Registriert: 06.02.2010 15:03

Nächste

Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron