Hilfe bei mod_rewrite

H

heidmann

Guest
Hallo,

also ich habe ein Problem beim Umschreiben von Links mit mod_rewrite.
Ausgangsbasis: Es handelt sich um einen Wordpress-Blog, auf den ein Shop System läuft. Ich wollte die Links zu sprechenden URLs umschreiben.
Anfangs war das große Problem, dass er den Link nicht umgeschrieben hat. Mittlerweile habe ich eigentlich die richtige htaccess gefunden mit:
CODE
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} category=1&product_id=1
RewriteRule ^ /shop/auto/audi-tt/? [L,R=301]


Mit dieser schreibt er den Link von example.de/shop/category=1&product_id=1 auf example.de/shop/auto/audi-tt/ geschrieben, was auch funktioniert. Jedoch existiert jetzt plötzlich nicht mehr die Seite für example.de/shop/auto/audi-tt/ mit dieser htaccess. Lösch ich die htaccess wieder, funktioniert der Link example.de/shop/auto/audi-tt/ wieder.
Noch kurz zum Hintergrund: Beide Links haben den gleichen Inhalt, weswegen ich die schlechtere URL auf die bessere leiten wollte.

Hat da jetzt jemand einen Rat für mich? Ich bin am Ende mit meinem Wissen.

Gruß und Danke
 
Hast du noch eine .htaccess im Verzeichnis shop mittels der die URLs auto/audi-tt/ etc. aus den URLs category=1&product_id=1 etc. erzeugt werden? Zusammen mit der Weiterleitung würdest du so eine Endlosschleife verursachen, was zu dem beschriebenen Problem führen kann. In so einem Fall muss man eine Abbruchbedingung formulieren, z.B.:

CODE RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} !/shop/auto/audi-tt/
RewriteCond %{QUERY_STRING} category=1&product_id=1
RewriteRule ^ /shop/auto/audi-tt/? [L,R=301]
 
meine 2te Antwort im Abakus
QUOTE Vielen Dank 800XE für deine Hilfe.

aber annehmen willst du sie wohl nicht?

ReCond bedeutet, das das via URLzeile reinkommt
und dann wird es umgeschrieben, auf "sprechendeURL" ...
... keine interne Umschreibung sondern eine Weiterleitung
damit die neue via URLzeile reinkommt

ich sagte das das der flasche Weg ist
sorg dafür das die "sprechendeURL" im HTML drin ist

was du machst ist wie

Chef in Stutgart ruft Filialleiter in München an
040 (=Hamburg) 123456 "verbinden sie mich mal mit ihrem Chef Herrn Soundso(=Chef von Münchener Filliale) .... Telefonzentralle drückt jetzt nicht den Haustelefonknopf, sondern ruft über zweite Leitung in München an und läßt sich dort verbinden und verbindet dann ihre 2 Leitungen so das du .....
 
Vielen Dank für deine Hilfe, die ich Versuche diesmal umzusetzen
wink.gif

Mir fehlt iwie das Wissen, um umzusetzen was du meinst. Deswegen bin ich auch nur bedingt, auf dein letztes Post eingegangen.
Du hattest geschrieben:
CODE
1. mußt du im Script dafür sorgen das Links ala /dort/unten/seite.html
generiert wird

2. das dann via htaccess auf

index.php?p1=dort&p2=unten&p3=seite

umgeleitet wird ....
... Umleitung nur intern, für PHP ..... kein 301 .... kein [R=301]


Aber wie setz ich sowas um? Was muss ich da genau beachten?

Danke
 
@heidmann

es wäre schön, wenn du auch zu meinem Vorschlag noch ein Feedback geben könntest; da ich dir den Code sogar schon hingeschrieben habe, sollte die Umsetzung da wohl nicht so das Problem sein
 
Entschuldige Jörg und vielen Dank für deinen Vorschlag.
Leider funktioniert dieser Vorschlag nicht. Der Link wird zwar an sich richtig umgeschrieben, jedoch findet er wieder die Seite nicht mehr. Es wird ein 404 ausgegeben.
 
Diese Frage hast du noch nicht beantwortet:

QUOTE Hast du noch eine .htaccess im Verzeichnis shop mittels der die URLs auto/audi-tt/ etc. aus den URLs category=1&product_id=1 etc. erzeugt werden?


Keine Ahnung, ob es daran liegt, aber bei einer Weiterleitung sollte die vollständige URL angegeben werden:


CODE RewriteRule .* http://example.com/shop/auto/audi-tt/? [L,R=301]
 
CODE Hast du noch eine .htaccess im Verzeichnis shop mittels der die URLs auto/audi-tt/ etc. aus den URLs category=1&product_id=1 etc. erzeugt werden?


Genau, die htacess liegt im Verzeichnis /html/shop/. Die muss da durch das Shop-Plugin rein. Liegt da das Problem, weil ja eigentlich die htaccess im root verzeichnis muss?

Vielen Dank für deine Hilfe.

Gruß
 
Du kannst hier auch zwei htaccess Dateien verwenden - die darin befindlichen Rules müssen aber genauso aufeinander abgestimmt sein, wie wenn sie sich in einer Datei befinden. Wie schaut denn der Inhalt der htaccess Datei im Verzeichnis shop aus?
 
Im Ordner /html/ gibt es keine htaccess.
Es gibt nur eine htaccess im Ordner /html/shop/:

QUOTE RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} category=1&product_id=1
RewriteRule ^ /shop/auto/audi-tt/? [L,R=301]


Oder war auch die vorige Version:


CODE RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} category=1&product_id=1
RewriteRule ^ /shop/auto/audi-tt/? [L,R=301]


Beide Versionen hatten Probleme damit. Hatte auch die Version von Jörg probiert.

Vielen Dank für eure Hilfe!
 
Und das ist alles, was in der .htaccess steht?

Du hattest weiter oben geschrieben:

QUOTE Noch kurz zum Hintergrund: Beide Links haben den gleichen Inhalt, weswegen ich die schlechtere URL auf die bessere leiten wollte.


Daraus schließe ich, dass diese URL bereits rewritet wird. Die beiden "Versionen" deiner htaccess - die übrigens identisch sind - beinhalten keine Rules, die den Inhalt von example.de/shop/category=1&product_id=1 auch unter example.de/shop/auto/audi-tt/ verfügbar machen. Diese Rules müssen aber ja in irgendeiner htaccess Datei stehen, welche die Shop-Software angelegt hat? Es wäre hilfreich, wenn du den kompletten Inhalt aller relevanten htaccess Dateien hier postest
 
Vielen Dank für die antgegengebrachte Hilfe.
Mit dieser Version läuft es nun zu 90%. Hier ist die Version:
CODE # BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{QUERY_STRING} category=1&product_id=1
RewriteRule ^ /shop/auto/audi-tt/? [L,R=301]
RewriteCond %{QUERY_STRING} category=1&product_id=10
RewriteRule ^ /shop/auto/vw-golf/? [L,R=301]
</IfModule>


Jetzt gibts "nur" noch ein Problem. Sobald die product_id größer als 9 ist, also 10, wird der Link auf die product_id von 1 geschrieben. Das selbe passiert auch bei den IDs 11 und 12.

Weiß der wer noch eine Lösung?

 
Zurück
Oben