Seite 1 von 1

Frage zu htaccess Anweisung

Verfasst: 19.12.2006, 11:45
von hansmaiser
Hallo,

was bewirkt diese Anweisung:

RewriteRule ^neu(.*)$ index.php?d=neu

Wird der Aufruf von www.domain.de/neu auf www.domain.de/index.php?d=neu weitergeleitet? Müsste das funktionieren?

Woran könnte es liegen, dass es nicht funktioniert?

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

Jetzt anfragen: 0511 / 300325-0.


Re: Frage zu htaccess Anweisung

Verfasst: 19.12.2006, 12:24
von haha
hansmaiser hat geschrieben:was bewirkt diese Anweisung:

RewriteRule ^neu(.*)$ index.php?d=neu

Wird der Aufruf von www.domain.de/neu auf www.domain.de/index.php?d=neu weitergeleitet?
Nein, es wird für alle URLs, die mit neu beginnen (!) und sich im Verzeichnis, in dem die betreffende .htaccess liegt, befinden, die URL index.php?d=neu aufgerufen.
NB: Der Browser bekommt davon nichts mit, das ist keine echte, externe Weiterleitung, sondern eine interne.
Woran könnte es liegen, dass es nicht funktioniert?
Erstmal muss das Modul mit RewriteEngine eingeschaltet und ihm anschließend mit RewriteBase die Basis-URL mitgeteilt werden. Danach kann man RewriteRule und, so nötig, RewriteCond benutzen.

Verfasst: 19.12.2006, 12:33
von hansmaiser
Ok, wie würde denn die Anweisung aussehen, wenn ich www.domain.de/neu auf www.domain.de/index.php?d=neu intern (nicht sichtbar) umleiten lassen wollte?

RewriteEngine On
RewriteBase /
RewriteRule ^neu(.*)$ index.php?d=neu

So funzt es nicht...

Verfasst: 19.12.2006, 12:49
von haha
hansmaiser hat geschrieben:RewriteEngine On
RewriteBase /
RewriteRule ^neu(.*)$ index.php?d=neu

So funzt es nicht...
Das Wort "funzen" solltest Du besser aus Deinem Sprachschatz streichen. Es ist keine brauchbare Fehlerbeschreibung, sondern nur eine Aufforderung, dass man Dir weitere Informationen aus der Nase zu ziehen soll.

Der Block sollte auf /neu ansprechen, auch wenn (.*) überflüssig ist (weil es auch auf /neuwertig, /neuegurken oder /neu/oder/alt/ anspricht) und ^neu$ richtiger wäre.

Variante 1: Erscheint statt index.php?d=neu die Meldung, dass /neu nicht gefunden wurde, probiere es erstmal nur mit neu und füge nacheinander ^ und $ hinzu. Prüfe weiterhin, ob Du auf index.php?d=neu direkt zugreifen kannst.

Variante 2: Erscheint die Fehlermeldung "Internal Server Error", musst Du Dich an Deinen Hoster wenden.

Variante 3: Erscheint irgendeine andere Seite, funken andere Rewrite- oder Redirect-Anweisungen dazwischen.

Verfasst: 19.12.2006, 12:56
von Gast
Das kannst Du mit einem 301 Redirect machen und solltest Du auch tun, wenn sich Deine URLs geändert haben. Hier mal ein Beispiel kurz aus einer .htaccess kopiert:

Code: Alles auswählen

RewriteEngine On
Redirect 301 /gallery.html  http://rutenmuehle.com/gallery,1.htm 

Verfasst: 19.12.2006, 12:57
von hansmaiser
Ok, hab ich versucht.

Es funktioniert mit

RewriteRule neu(.*)$ index.php?d=neu

Dieses ^ stört anscheinend... Naja hauptsache es funktioniert jetzt ;-)

Vielen Dank Haha!!

Verfasst: 19.12.2006, 13:26
von hansmaiser
Ok, jetzt funktionieren die URLS ohne Parameter. Jedoch stimmen die URLS mit Parameter nicht...

Hier ein Bsp:

RewriteRule artikel(.*)_(.*)$ index.php?d=artikel&id=$1

Die angezeigte URL sieht so aus

www.domain.de/artikel18_test

Eigentlich müsste doch intern www.domain.de/index.php?d=artikel&id=18 aufgerufen werden oder? Wenn die interne URL direkt aufrufe wird der Artikel angezeigt, ansonsten nicht.

Ist in der Rule ein Fehler oder warum wird nicht richtig umgeleitet?

Verfasst: 19.12.2006, 16:06
von haha
hansmaiser hat geschrieben:Es funktioniert mit

RewriteRule neu(.*)$ index.php?d=neu

Dieses ^ stört anscheinend
Merkwürdig. Das ^ markiert den Beginn des Textes, das $ das Textende; das Muster ^neu$ bedeutet also "Textanfang, Zeichen n, e, u, Textende". So gesehen müsste ^neu$ auf neu passen. Irgendwas stört da.

Probiere doch nochmal ^/neu$ oder versuche es mit ^.neu$, ^..neu$ usw (ein Punkt steht für ein einzelnes, beliebiges Zeichen), um herauszufinden, wieviel da noch vor dem neu steht.
^.*neu$ müsste übrigens auch funktionieren, ist aber genauso unschön wie neu$ .

Aus letztlich dem gleichen Grund solltest Du in jedem Fall den Klammerteil am Ende rausnehmen. Dein jetziges Muster neu(.*)$ passt nämlich auf alles, was irgendwo das Wörtchen neu enthält, einmal weil vorne die Anfangsmarke ^ fehlt (es kann also noch beliebiger Text vor neu kommen), einmal weil zwischen neu und Endmarke $ die beiden Zeichen .* stehen, die für eine beliebige Menge (*) beliebiger Zeichen (.) stehen.
RewriteRule artikel(.*)_(.*)$ index.php?d=artikel&id=$1

Die angezeigte URL sieht so aus

www.domain.de/artikel18_test

Eigentlich müsste doch intern www.domain.de/index.php?d=artikel&id=18 aufgerufen werden oder?
Sehe ich auch so und tut's bei mir auch so. Irgendwo scheint bei Dir der Wurm drin zu sein, weil ^neu$ ja auch schon nicht auf neu passt.

Da Du mehrere Regeln zu haben scheinst, solltest Du am Besten alles auskommentieren bis auf RewriteEngine, RewriteBase und die zu prüfende RewriteRule/RewriteCond-Kombination. Auf diese Weise kannst Du zumindest ausschließen, dass es zu Überschneidungen kommt.

Beachte auch, dass die RewriteRule-Zeilen meist mit [L] enden sollten, um die weitere Verarbeitung abzubrechen (siehe Anleitung).