| Autor |
Nachricht |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
 Ordner aus URL eliminieren
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:
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?
|
| 31.01.2010 19:38 |
|
 |
mapero
.

Anmeldedatum: 03.02.2010
Beiträge: 4
|
Ich bin zwar kein Profi.
Aber ich vermute das [L] in der 1ten Regel verhindert die Ausführung der 2ten Regel:
Zitat:
[L] Last | Bearbeitung abschliessen, keine weiteren Regeln anwenden.
Probier es mal so:
Code:
RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
RewriteRule ^(.*)$ http://example.de/$1 [R=301]
RewriteRule ^ordner/(.*)$ /$1 [R=301,L]
|
| 03.02.2010 10:39 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
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...
|
| 03.02.2010 12:59 |
|
 |
mapero
.

Anmeldedatum: 03.02.2010
Beiträge: 4
|
Probier mal den / vor dem $1 weg zu lassen.
Bin leider auch nicht so bewandert mit modrewrite.
|
| 03.02.2010 14:03 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
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.
|
| 03.02.2010 14:42 |
|
 |
Internetmafia
.

Anmeldedatum: 27.01.2010
Beiträge: 22
|
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  )
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:
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
|
| 03.02.2010 18:48 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
Internetmafia hat Folgendes 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
|
| 03.02.2010 22:05 |
|
 |
Internetmafia
.

Anmeldedatum: 27.01.2010
Beiträge: 22
|
Hallo Krabbe,
dann sollte diese Regel eigentlich schon reichen:
Code:
# 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
|
| 04.02.2010 15:37 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
Internetmafia hat Folgendes 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
Aber verstehen würde ich es gerne.
|
| 05.02.2010 11:06 |
|
 |
kartoffelkopf
.

Anmeldedatum: 06.02.2010
Beiträge: 59
|
Code:
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
|
| 06.02.2010 16:17 |
|
 |
Internetmafia
.

Anmeldedatum: 27.01.2010
Beiträge: 22
|
kartoffelkopf hat Folgendes geschrieben:Code:
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
Hat es damit funktioniert?
Gruß Jan
|
| 08.02.2010 15:36 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
Internetmafia hat Folgendes geschrieben:kartoffelkopf hat Folgendes geschrieben:Code:
RewriteRule ^/ordner/(.*)$ http://example.de/$1 [R=301,L]
Hat es damit funktioniert?
Gruß Jan
Nein, leider immer noch nicht... **haare rauf**
|
| 08.02.2010 15:55 |
|
 |
kartoffelkopf
.

Anmeldedatum: 06.02.2010
Beiträge: 59
|
krabbe hat Folgendes geschrieben:Internetmafia hat Folgendes geschrieben:kartoffelkopf hat Folgendes geschrieben:Code:
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.
|
| 08.02.2010 18:04 |
|
 |
krabbe
.

Anmeldedatum: 31.01.2010
Beiträge: 10
|
kartoffelkopf hat Folgendes 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:
<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>
|
| 08.02.2010 18:22 |
|
 |
kartoffelkopf
.

Anmeldedatum: 06.02.2010
Beiträge: 59
|
krabbe hat Folgendes geschrieben:kartoffelkopf hat Folgendes 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:
<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:
<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.
|
| 08.02.2010 18:48 |
|
 |
|
|