Zur Navigation

Über htaccess einem URL etwas hinzufügen. [2]

11 Jörg Kruse

Hatte dieser Versuch denn einen 500er geworfen:

#Options +FollowSymLinks
#RewriteEngine On
#RewriteRule ^/index\.php/en/component/glossary/ /index.php/en/component/glossary/?letter=All&glossid=3 [R=301,L]
#RewriteRule ^/index\.php/de/component/glossary/ /index.php/de/component/glossary/?letter=All&glossid=2 [R=301,L]

Wenn nicht, dann klemm hier auch noch das "Options +FollowSymLinks" davor:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteRule index.php/de/component/glossary/ index.php/de/component/glossary/?task=list&glossid=2&letter=%1

RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteRule index.php/en/component/glossary/ index.php/en/component/glossary/?task=list&glossid=3&letter=%1

03.02.2009 22:23 | geändert: 03.02.2009 22:24

12 Mathias (Gast)

1. Zu Joomla: Suchmaschinenfreundliche Links sind eingestellt. Da hattest Du recht, dass Joomla da was bastelt. Mod-Rewrite wird von Joomla nicht benutzt, bzw. ist ausgeschaltet.

2. Der obere Versuch hat keinen 500er geworfen, allerdings auch gar nichts weiteres bewirkt.

3. Symlinks habe ich angehängt. -> Weiterhin 500er Fehler.

4. Lokal unter Mamp 1.7.1 getestet. Auch einen 500er Fehler bekommen.

4a. Mamp Apache Fehler-Log:
mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary


5. Frage: Gibt es nicht die Möglichkeit einfach eine "&glossid=X" ranzuhängen für jeden Fall?

03.02.2009 22:50

13 Jörg Kruse

mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary

Das klingt nach Endlosschleife. Die könnte man so versuchen, zu stoppen:

RewriteEngine On
RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/de/component/glossary/ index.php/de/component/glossary/?task=list&glossid=2&letter=%1&stop=1

RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/en/component/glossary/ index.php/en/component/glossary/?task=list&glossid=3&letter=%1&stop=1

03.02.2009 23:00 | geändert: 03.02.2009 23:00

14 Mathias

Wow! Das sieht schon mal viel versprechend aus!

(PS: Habe mich übrigens jetzt mal in diesem fantastischem Forum registriert. Nicht wundern!)

Problem jetzt:
1. Er zeigt mir zwar das richtige Glossar an, in der URL steht aber immer noch das Ursprungs-Glossar. Es wird nicht umgeschrieben. Also "glossid=2" wird nicht zu "3", obwohl "de" zu "en" gewechselt wurde. Der Inhalt schon, aber nicht die ID.

2. Es lässt sich nicht mehr bedienen. Alle Einträge sind weg, bzw. werden nicht mehr angezeigt. Das Alphabet lässt sich anklicken aber nicht mehr anzeigen.

03.02.2009 23:17

15 Jörg Kruse

Du kannst daraus auch eine Weiterleitung machen, die Browser müssen dann alerdings auch zwei Aufrufe statt einem machen

RewriteEngine On
RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/de/component/glossary/ http://example.com/index.php/de/component/glossary/?task=list&glossid=2&letter=%1&stop=1 [R=301]

RewriteCond %{QUERY_STRING} task=list&glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/en/component/glossary/ http://example.com/index.php/en/component/glossary/?task=list&glossid=3&letter=%1&stop=1 [R=301]

03.02.2009 23:24 | geändert: 03.02.2009 23:25

16 Mathias

Zitat von Jörg
Du kannst daraus auch eine Weiterleitung machen...

Das hat leider den gleichen Effekt.


Aber...
Sag mal, kennst Du nicht eine Möglichkeit dem ganzen String einfach ein "&glossid=X" anzuhängen? Das würde eigentlich das ganze Problem lösen, wenn ich dem PHP-String einfach je nach Verzeichnis noch die entsprechende glossid anhängen könnte.

03.02.2009 23:48

17 Jörg Kruse

Zitat von Mathias
Zitat von Jörg
Du kannst daraus auch eine Weiterleitung machen...

Das hat leider den gleichen Effekt.

Welchen Effekt - dass es sich nicht bedienen lässt? Dann hat dein Joomla ein Problem mit den überschriebenen Parametern

Aber...
Sag mal, kennst Du nicht eine Möglichkeit dem ganzen String einfach ein "&glossid=X" anzuhängen? Das würde eigentlich das ganze Problem lösen, wenn ich dem PHP-String einfach je nach Verzeichnis noch die entsprechende glossid anhängen könnte.

Inwiefern soll das etwas lösen, wenn du &glossid=X hinten dran hängst, statt es mittendrin zu überschreiben? Die Parameter, die Joomla erhält, sind dann ja dieselben? Oder funktioniert ein direkter Aufruf von
http://example.com/index.php/en/component/glossary/?task=list&glossid=2&letter=M&stop=1&glossid=3
im Gegensatz zu einem direkten Aufruf von
http://example.com/index.php/en/component/glossary/?task=list&glossid=3&letter=M&stop=1

In der Reihenfolge würde das auch nicht funktionieren - man könnte höchstens einen neuen Parameter an die URL hängen und hintendran den alten Query String. Aber das würde dir nichts bringen.

04.02.2009 00:21 | geändert: 04.02.2009 00:22

18 Mathias

Zitat von Jörg
Welchen Effekt - dass es sich nicht bedienen lässt?

Ja, das meine ich. Es lässt sich nicht mehr bedienen und zeigt keine Ergebnisse mehr an.


Die beiden funktionieren nicht, bzw. haben oben genannten Effekt:
http://example.com/index.php/en/component/glossary/?task=list&glossid=2&letter=M&stop=1&glossid=3
http://example.com/index.php/en/component/glossary/?task=list&glossid=3&letter=M&stop=1
Also sobald ein &stop=1 drin ist, wird die Funktionalität des Glossars lahm gelegt.


Folgender Aufruf funktioniert allerdings tadellos:
http://www.example.com/index.php/de/component/glossary/?task=list&glossid=3&letter=Ml&glossid=2
Das zweite "glossid" überschreibt das erste im String. Es zeigt Dass Glossar 2 und alle Begriffe, die mit dem Buchstaben M anfangen.

Es ist zwar keine schöne Lösung, aber es würde mein Problem anscheinend lösen.

04.02.2009 08:42

19 Jörg Kruse

Zitat von Mathias
Zitat von Jörg
Welchen Effekt - dass es sich nicht bedienen lässt?

Ja, das meine ich. Es lässt sich nicht mehr bedienen und zeigt keine Ergebnisse mehr an.


Die beiden funktionieren nicht, bzw. haben oben genannten Effekt:
http://example.com/index.php/en/component/glossary/?task=list&glossid=2&letter=M&stop=1&glossid=3
http://example.com/index.php/en/component/glossary/?task=list&glossid=3&letter=M&stop=1

Dann macht es wie vermutet keinen Unterschied, ob der Parameter überschrieben oder hintendrangehängt wird

Also sobald ein &stop=1 drin ist, wird die Funktionalität des Glossars lahm gelegt.

Der wird ja benötigt, um eine Endlosschleife zu verhindern.

Folgender Aufruf funktioniert allerdings tadellos:
http://www.example.com/index.php/de/component/glossary/?task=list&glossid=3&letter=Ml&glossid=2
Das zweite "glossid" überschreibt das erste im String. Es zeigt Dass Glossar 2 und alle Begriffe, die mit dem Buchstaben M anfangen.

Es ist zwar keine schöne Lösung, aber es würde mein Problem anscheinend lösen.

Nur hättest du da wahrscheinlich auch wieder das Problem mit der Endlosschleife. Das Problem ist wohl nicht, ob der Parameter überschrieben oder hinten angehängt wrid, sondern der zusätzliche Parameter stop.

Aber du könntest es mal so probieren:

RewriteEngine On
RewriteCond %{QUERY_STRING} task=list&glossid=([^2])&letter=(.*)
RewriteRule index.php/de/component/glossary/ http://example.com/index.php/de/component/glossary/?task=list&glossid=2&letter=%1 [R=301, L]

RewriteCond %{QUERY_STRING} task=list&glossid=([^3])&letter=(.*)
RewriteRule index.php/en/component/glossary/ http://example.com/index.php/en/component/glossary/?task=list&glossid=3&letter=%1 [R=301, L]

Dann wird nur weitergeleitet, wenn glossid nicht zur Sprache passt, und man benötigt keinen Abbruchparameter

04.02.2009 09:01

20 Mathias

Ich weiss nicht, warum Dein Code jetzt (zumindest fast) funktioniert. Vielleicht war ich zu müde. Ausgetauscht habe ich auf jeden Fall %1 durch %2.

Dieser Code:

#Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/de/component/glossary/ http://www.example.com/index.php/de/component/glossary/?glossid=2&letter=%2&stop=1 [R=301]

RewriteCond %{QUERY_STRING} glossid=([0-9])&letter=(.*)
RewriteCond %{QUERY_STRING} !stop=1
RewriteRule index.php/en/component/glossary http://www.example.com/index.php/en/component/glossary/?glossid=3&letter=%2&stop=1 [R=301]

bewirkt folgendes:

1. In der Adresszeile steht:
http://www.example.com/index.php/de/component/glossary/?glossid=3&letter=All&stop=1
Ich habe das Englishe Glossar und drücke auf den Umschalter für Deutsch.

2. Die Seite lädt kurz. Die Seite bleibt ansonsten wie sie ist, also mir wird nach wie vor das englische Glossar angezeigt. In der Adresszeile steht:
http://www.example.com/index.php/de/component/glossary/?glossid=3&letter=All&stop=1

3. Ich drücke einen Buchstaben des (immer noch englischen) Glossar-Alphabets z.B.: "D". Die Seite lädt neu. Das Deutsche Glossar erscheint mit der Seite mit den Sachwörtern, die mit D anfangen. Jetzt erst ist alles wie es sein sollte. In der Adresszeile steht:
http://www.example.com/index.php/de/component/glossary/?glossid=2&letter=D&stop=1


Wie es jetzt scheint wird durch den Umschalter kein wirklicher Befehl zum Neu-Laden der Seite gesendet. Vielleicht ist das irgendeine Ajax-Prozedur des Joomfish-Übersetzungs-Plug-In. Das würde zumindest erklären, dass bei Punkt 1 auf 2 zwar das "en" durch "de" ersetzt wird, allerdings nicht die glossid. Die wird dann erst beim nächsten Klick ersetzt durch deine Rewrite-Rule erledigt.

04.02.2009 15:28