Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Probleme mit mod_rewrite

Mehrere Domains, Domain-Umzug, neue Dateinamen, 301/302
Neues Thema Antworten
surfer24
PostRank 1
PostRank 1
Beiträge: 2
Registriert: 18.07.2012, 12:16

Beitrag von surfer24 » 18.07.2012, 12:40

Hallo alle zusammen,

ich hab ein Problem mit einer .htaccess Datei.

Dazu habe ich folgenden Code erstellt:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^variabel1=([^&]+)&variabel2=([^&]+)$
RewriteRule ^(.*) https://www.meinedomain.de/%1-%2.html? [L,R=301]
RewriteRule ^([^&]+)-([^&]+).html$ /index.php?variabel1=$1&variabel2=$2&umgeleitet=ja


RewriteCond %{QUERY_STRING} ^variabel3=wert&variabel4=([^&]+)$
RewriteRule ^(.*) https://www.meine.domain.de/%1.html? [L,R=301]
RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja

Die Regel funktioniert auch soweit. Sobald ich bei der 2ten Regel

RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja

der "variabel4" einen Wert mit Bindestrich übergebe (z.Bsp: variabel4="mein-wert") wird dieser von dem Server nicht erkannt und nicht entsprechend verarbeitet. Ich erhalte auch keine Fehlermeldung.

Wenn ich aber eine .htacess Datei die nur die Regel

RewriteEngine On

RewriteCond %{QUERY_STRING} ^variabel3=wert&variabel4=([^&]+)$
RewriteRule ^(.*) https://www.meine.domain.de/%1.html? [L,R=301]
RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja

dann funktioniert diese auch einwandfrei. Auch Werte mit Bindestrich die ich der "variabel4" übergebe werden ohne Probleme verarbeitet.



Sinn der Übung ist es aus einer dynamische URL die $_GET Werte beinhaltet und wie folgt aussieht:

www.meinedomain.de/index.php?variabel1= ... bel2=wert2

eine SEO freundliche URL zu machen:

www.meinedommain.de/wert1-wert2.html

bzw.

www.meinedomain.de/wert2.html

Hat jemand eine Idee woran das liegen könnte, wenn beide Regeln in der .htaccess Datei liegen, dass die zweite nicht einwandfrei arbeitet?
Für eure Hilfe wäre ich sehr dankbar.

Grüsse,
surfer24

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 18.07.2012, 14:40

Jetzt muss ich mal überlegen, ob ich das ohne einen Test hinbekomme. Also, Du möchtest var 1 und 2 auf Domain weiterleiten und var 3 und 4 auf eine Subdomain. Dann das L in [L,R=301] ist ja richtig, bedeutet aber "letzte Regel", hat dadurch erst einmal keinen Einfluss mehr auf die jeweils letzte Rule. Womit der Test dann mit zwei Zeilen beginnen könnte:

Code: Alles auswählen

RewriteRule ^([^&]+)-([^&]+).html$ /index.php?variabel1=$1&variabel2=$2&umgeleitet=ja 
RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja
Nun rufst Du die erste und zweite URL auf:

"https://www.meinedomain.de/wert1-wert2.html"
"https://www.meine.domain.de/mein-wert.html"

Siehst Du bei mir oder bei Dir einen Denkfehler?

In beiden Fällen würde (nur Meinung, da ungetestet) die erste Rule greifen, es sei denn, die erste Regel ist nicht vorhanden, dann würde die zweite greifen oder Du setzt vor den beiden Rules noch jeweils eine Bedingung.

Code: Alles auswählen

RewriteCond %{HTTP_HOST} ^www\.meinedomain\.de$
RewriteRule ^([^&]+)-([^&]+).html$ /index.php?variabel1=$1&variabel2=$2&umgeleitet=ja

RewriteCond %{HTTP_HOST} ^www\.meine\.domain\.de$
RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja
So geht es eventuell schon besser, bin mir aber nicht sicher, dass Testen überlasse ich erst einmal Dir.

surfer24
PostRank 1
PostRank 1
Beiträge: 2
Registriert: 18.07.2012, 12:16

Beitrag von surfer24 » 18.07.2012, 15:07

Hi Melegrian,

vielen Dank für deine schnelle Antwort.

Ich möchte folgendes realisieren:

Die URL:
www.meindomain/index.php?id=wert1&subid=wert2

soll in die URL:
www.meinedomain/wert1-wert2.html umgewandelt werden.

Dazu habe ich die erste Regel geschrieben:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^id=([^&]+)&subid=([^&]+)$
RewriteRule ^(.*) https://www.meinedomain.de/%1-%2.html? [L,R=301]
RewriteRule ^([^&]+)-([^&]+).html$ /index.php?id=$1&subid=$2&umgeleitet=ja

Diese funktioniert auch einwandfrei. id und subid sind $_GET Variablen und werden auch ohne Probleme verarbeitet.

Aber ich habe gleichzeitig das Konstrukt:

www.meindomain/index.php?link=wert1&sublink=wert2

die soll dann so aussehen:

www.meindomain/wert2.html

Dazu habe ich die zweite Regel erstellt:

RewriteCond %{QUERY_STRING} ^link=wert1&sublink=([^&]+)$
RewriteRule ^(.*) https://www.meine.domain.de/%1.html? [L,R=301]
RewriteRule ^([^&]+).html$ /index.php?link=wert1&sublink=$1&umgeleitet=ja

Hier wird nur für "sublink" eine $_GET Wert übergeben. Diese Funktion funktioniert nur eingeschränkt. Wenn die Variabel "sublink" einen Wert ohne Bindestrich erhält, dann läufts auch auch ohne Probleme, nur mit Bindestrich kann die Variable von meinem Script dann nicht ausgeführt werden.

Beispiel:
www.meinedomain/index.php?link=wert&sublink=andererwert
diese Kombination läuft problemlos, aber
www.meinedomain/index.php?link=wert&sub ... derer-wert
funktioniert nicht.

Die URL wird zwar umgeschrieben auf: www.meindomain/anderer-wert.html
aber der übergebene Inhalt, also "anderer-wert" wird vom Script nicht verarbeitet.

Wenn die zweite Regel nur alleine in der .htacess Datei steht, dann wird "ander-wert" alsauch "andererwert" vom Script verbeitet. Nur wenn Sie mit der ersten Rule in der .htaccess Datei steht, dann funktioniert es nicht mehr.

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 18.07.2012, 15:38

Bin jetzt etwas verwirrt, Du möchtest doch mit der letzten Regel auf "www.meine.domain.de", also auf eine Subdomain weiterleiten. Warum machst Du daraus keine Bedingung?

Du hast nicht 2 Regeln, Du hast 4 Regeln geschrieben. Die 1. und 3. Regel benötigst Du aber noch nicht gleich, die 1. und 3. ist nur dafür gut, damit das URL-Rewriting in beiden Richtungen wirkt. Wichtig ist jetzt erst einmal nur, dass die 2. und die 4. Regel zuverlässig ihren Dienst verrichten und die anderen beiden kannst Du erst einmal weglassen.

Jetzt sieht es bei Dir so aus:

1. Bedingung
1. Regel [Ende der ersten Regel]
2. Bedingung [fehlt!]
2. Regel

3. Bedingung
3. Regel [Ende der dritten Regel]
4. Bedingung [fehlt!]
4. Regel

Im Normalfall kann man sich die 2. und 4. Bedingung ersparen, aber nur wenn keine Verwechslungsgefahr besteht, woraus dann 2 Dreizeiler würden. Bei Deinen Beispielen besteht aber die Verwechslungsgefahr.

Melegrian
PostRank 10
PostRank 10
Beiträge: 3170
Registriert: 30.01.2005, 12:36

Beitrag von Melegrian » 18.07.2012, 15:58

Um das mal etwas aufzuteilen, daraus könnte ein Schuh werden:

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^variabel1=([^&]+)&variabel2=([^&]+)$
RewriteRule ^(.*) http://www.meinedomain.de/%1-%2.html? [L,R=301}

RewriteCond %{HTTP_HOST} ^www\.meinedomain\.de$
RewriteRule ^([^&]+)-([^&]+).html$ /index.php?variabel1=$1&variabel2=$2&umgeleitet=ja [L]


RewriteCond %{QUERY_STRING} ^variabel3=wert&variabel4=([^&]+)$
RewriteRule ^(.*) http://www.meine.domain.de/%1.html? [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.meine\.domain\.de$
RewriteRule ^([^&]+).html$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja [L]
Wobei mir das jetzt mit der Subdomain ohnehin etwas spanisch vorkommt. Doch wenn Du schreibst, dass die Regeln einzeln ihren Dienst verrichten, so sollte ja Deine Schreibweise richtig sein. Die beiden 301 mit ihren Bedingungen kannst Du zumindest erst einmal deaktivieren, bis die eigentlichen Regeln zuverlässig funktionieren.

Oder Du verzichtest auf die zusätzlichen Bedingungen und verwendest dafür unterschiedliche Extensionen, zum Beispiel einmal html und einmal htm. Irgendwie musst Du die Verwechselungen jedenfalls ausschließen.

Code: Alles auswählen

RewriteCond %{QUERY_STRING} ^variabel1=([^&]+)&variabel2=([^&]+)$
RewriteRule ^(.*) http://www.meinedomain.de/%1-%2.html? [L,R=301}

RewriteRule ^([^&]+)-([^&]+).html$ /index.php?variabel1=$1&variabel2=$2&umgeleitet=ja [L]


RewriteCond %{QUERY_STRING} ^variabel3=wert&variabel4=([^&]+)$
RewriteRule ^(.*) http://www.meine.domain.de/%1.htm? [L,R=301]

RewriteRule ^([^&]+).htm$ /index.php?variabel3=wert&variabel4=$1&umgeleitet=ja [L]

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag