Problem mit RewriteRule

zubi

Mitglied
Hallo Forumgemeinde

Ich habe ein Problem mit einer Rewriterule und vieleicht kann mir ja einer helfen:

Der Apache läuft als Proxy für einen Tomcat (mit JSP Applikation)
also:

<VirtualHost 192.168.22.33:443>
ServerName www.serverurl.com:443
ProxyPass / http://localhost:8080/participant
ProxyPassReverse / http://localhost:8080/participant
SSLEngine on
SSLCertificateFile conf/ssl/www.serverurl.com.crt
SSLCertificateKeyFile conf/ssl/www.serverurl.com.key
usw...
</VirtualHost>

Da die App Multilingual ist kann sie über mehrere Adressen
erreicht werden z.B. www.serverurl.com, www.serverurl.ch
www.serverurl.fr usw.

Dafür habe ich dann Namevirtualhosts mit Redirect eingerichtet.

<VirtualHost www.serverurl.ch:80>
ServerName www.serverurl.ch:80
Redirect / https://www.serverurl.com/participant/manda...date_ctrl=CH:de
</VirtualHost>

Bis hierhin funktioniert alles prächtig.
Jetz kommen wir dann endlich zum eigentlichen RewriteRule Problem.

Die URL https://www.serverurl.com/participant/manda...date_ctrl=CH:de ist halt nicht so Suchmaschinenfreundlich; daher
würde ich gerne auf folgende URL Redirecten:
https://www.serverurl.com/participant/manda...hange/CH:de.htm
Diese müsste dann gerewrited werden, das sieht bei mir folgendermassen aus:

RewriteEngine on
RewriteRule ^participant/mandateChange/(.*)\.htm$ participant/mandateChange.do?mandate_ctrl=$1

Funktioniert aber leider nicht
sad.gif


Kann mir einer sagen, was ich falsch mache?

Danke im Voraus - zubi
 
Ciao zubi

Die Rewriterule an sich geht ? Bei etwas komplizierteren host Strukturen lohnt es sich, die einzelen Teile zuerst zu testen und dann die sicher funktionierenden Teile zusammenzusetzen.

Wo genau befinden sich die Rewriterules ? nur beim https host oder bei allen ?

Wenn "nur" die rewriterule nicht geht, ists es empfehlenswert, schnell die rewrite logs einzuschalten und dann einen Aufruf genau zu analysieren.

Was mir noch auffällt: Das redirect ist statisch ? da wird fix alles auf / an https://www.serverurl.com/participant/manda...date_ctrl=CH:de weitergeleitet ? Was geschiet, wenn die mandate_ctrl=DE:de ist ??

Gruss
Roger
 
Hallo Roger

Danke für die schnelle Antwort.
Anbei jetzt mein Feedback


QUOTE >Wo genau befinden sich die Rewriterules ? nur beim https host oder bei allen ?

Zur Zeit befindet sich die Rewriterule nur beim https host, hatte diese aber auch zu Testzwecken schon in alle virtualhosts reingeschrieben.



QUOTE >Wenn "nur" die rewriterule nicht geht, ists es empfehlenswert, schnell die rewrite >logs einzuschalten und dann einen Aufruf genau zu analysieren.

Danke für den Tip, hab ich gemacht, werde aber nicht richtig schlau daraus.
Anbei der Inhalt des rewrite logs:

192.168.22.34 - - [08/Jul/2004:13:11:06 +0200] [www.serverurl.com/sid#5edfa0][rid#64f330/initial] (1) pass through /
192.168.22.34 - - [08/Jul/2004:13:11:06 +0200] [www.serverurl.com/sid#5edfa0][rid#663c90/subreq] (1) pass through /index.html
192.168.22.34 - - [08/Jul/2004:13:11:06 +0200] [www.serverurl.com/sid#5edfa0][rid#663c90/subreq] (1) pass through /index.html.var
192.168.22.34 - - [08/Jul/2004:13:11:06 +0200] [www.serverurl.com/sid#5edfa0][rid#6551a8/initial/redir#1] (1) pass through /index.html.de

Im document root habe ich noch die Apache Standardfiles also diese index.html.var, das wird dann (deutscher Browser) zu index.html.de, da macht er dann passthroughs, aber eben so richtig schlau werde ich aus dem Logfileeintrag auch nicht.


QUOTE >Was mir noch auffällt: Das redirect ist statisch ? da wird fix alles auf / an >https://www.serverurl.com/participant/manda...date_ctrl=CH:de weitergeleitet ? >Was geschiet, wenn die mandate_ctrl=DE:de ist ??

Es hat hier 2 Anforderungen an die Seite
- Die Page soll prinzipell nur per https erreichbar sein.
- Je nach Domainaufruf des Benutzer (Browser bzw. Client) soll er auf
"seine" Sprachversion gelangen.

Hier mal ein Auszug aus meiner httpd.conf:

<VirtualHost www.serverurl.com:80>
ServerName www.serverurl.com:80
Redirect / https://www.serverurl.com
ErrorLog logs/error.log
CustomLog logs/access.log combined
</VirtualHost>

Also Port80 gleich auf Port 443 (https://www...) forwarden bzw. redirecten.

Hier kommt dann der Redirect der einzelnen Domain:

<VirtualHost www.serverurl.ch:80>
ServerName www.serverurl.ch:80
Redirect / https://www.serverurl.com/participant/manda...date_ctrl=CH:de
ErrorLog logs/error.log
CustomLog logs/access.log combined
</VirtualHost>

<VirtualHost www.serverurl.de:80>
ServerName www.serverurl.de:80
Redirect / https://www.serverurl.com/participant/manda...date_ctrl=DE:de
ErrorLog logs/error.log
CustomLog logs/access.log combined
</VirtualHost>

<VirtualHost www.serverurl.fr:80>
ServerName www.serverurl.fr:80
Redirect / https://www.serverurl.com/participant/manda...date_ctrl=FR:fr
ErrorLog logs/error.log
CustomLog logs/access.log combined
</VirtualHost>

Soweit geht auch alles.
Alles bei Eingabe von http://www.serverurl.com landet man auf https://www.serverurl.com

Bei Eingabe von z.B. http://www.serverurl.ch landet man auch erwartungsgemäss auf https://www.serverurl.com/participant/manda...date_ctrl=CH:de

Aber eigentlich will ich ja auf https://www.serverurl.com/participant/manda...hange/CH:de.htm redirecten, das
dann halt auf https://www.serverurl.com/participant/manda...date_ctrl=CH:de geriwrited werden soll (siehe mein 1. Beitrag). Das Resultat ist aber eine 404 und obiger Eintrag ins rewrite.log.

Ich hoffe ich konnte mein Situation einigermassen klar darstellen.
Falls Du (Roger) oder jemand anders bessere Wege (andere Konfiguartion des Webservers) kennst, bin ich immer offen und dankbar für Tips.

Was finanziell nicht drinliegt ist, dass ich für jede Domain (als .fr, .de etc.) ein SSL Zertifikat kaufe, darum muss halt alles auf https://www.serverurl.com redirecten.

Danke!
zubi
 
ok. ich glaub ich verstehe nun das Problem. Probier doch mal folgendes:

1. Ändere die Redirects so ab, dass sie suchmaschinenfreundlich sind, also so dass sie zur RewriteRule passen. (Damit sollte der 404er weg sein)
1.1 Wenn nun nur noch 404er kommen, ist die Rewrite Rule falsch
2. Die RewriteRules sollten dann nur im https vhost drin sein.

Wenn das nicht hilft, bitte mal den Eintrag im error log für den 404er suchen. Der wäre sicher interessant.

Zum Konzept allgemein: Ich hätte es auch so gemacht, bin ebenfalls ein vhost Freund. Nur: Die Annahme, dass alle *.ch Anfragen auf deutsch bearbeitet werden find ich etwas gewagt.
Wegen dem SSL Cert: Da gibts keine andere Lösung. Da es alles verschiedene Domains sind, müsstest du tatsächlich pro Domain ein Cert haben -> Abzocke !
 
Hab's nun hinbekommen
tongue.gif


Das Problem war der Tomcat, ist nämlich nicht so einfach bei Apache + Tomcat mit den Rewriterules. Wer wissen will wie's geht, hier steht's:

http://jakarta.apache.org/tomcat/tomcat-5....ncer-howto.html

Danke für die Hilfe

cheers

zubi

PS:

QUOTE Wegen dem SSL Cert: Da gibts keine andere Lösung. Da es alles verschiedene Domains sind, müsstest du tatsächlich pro Domain ein Cert haben -> Abzocke !

Bin absolut Deiner Meinung!



QUOTE Nur: Die Annahme, dass alle *.ch Anfragen auf deutsch bearbeitet werden find ich etwas gewagt.

Da hast Du nicht unrecht. Gibt ja auch italienisch und französisch sprechende
Schweizer :) .... Die haben natürlich auch noch die Möglichkeit die Sprache manuell zu wechseln
 
Zurück
Oben