fragen stichworte

Jboss + mod_rewrite =?

Ich habe 2 Server, Apache und Jboss. Die Verwendung von JKmount .war-Dateien werden bereitgestellt und stellen eine komplexe Site dar.

zB:

JkMount/directory/* ajp13
Alias/directory/jboss/server/default/deploy/directory.war
<Directory /jboss/server/default/deploy/directory.war>
  Order allow,deny
  allow from all
  Options -Indexes
</Directory>
<Directory /jboss/server/default/deploy/directory.war/WEB-INF>
  deny from all
</Directory>

Ich möchte mod_rewrite auf der Apache-Seite verwenden, um die von mod_jk zurückgegebenen URLs zu ändern.

zB:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192.168.1.1$
RewriteRule/.* http://server.example/redirect.html [R=301,L]

Derzeit betrifft der obige Code nur die von Apache zurückgegebenen Bilder und nicht die von mod_jk zurückgegebenen Seiten.

Ist das möglich? Wie wird es gemacht?

Eine ähnliche Frage wird an StackOverFlow gestellt. Wenn Sie jedoch die Wahl haben, ob ich möglicherweise intern mit Apache umgehen möchte, kann die Jboss-Konfiguration nicht geändert werden.

Der Server ist OpenSuse 11.1, und ich vermute, dass möglicherweise Probleme mit der Reihenfolge der Module vorliegen. Ich konnte dies jedoch nicht bestätigen.

Beispiele für URLs wären:

http://site.example/directory/index.jsp
http://site.example/foo/other.html

In diesem Beispiel wird die erste URL in mod_jk mit den in der obigen Konfiguration aufgeführten Anweisungen eingehängt und würde NICHT von mod_rewrite neu geschrieben. Die zweite URL ist ein normales Verzeichnis auf der Apache-Site und wird korrekt umgeschrieben.

Vielen Dank an alle

antworten

Nach langer Suche habe ich die Antwort auf diese Frage gefunden.

Die Direktbefehlsanweisung muss für den (virtuellen) Host nicht global in oder in einem .htaccess platziert werden. Apache scheint diese Dateien nicht zu analysieren, da die von mod_jk bereitgestellten Dateien nicht Teil dieser Struktur sind. Das macht Sinn, wenn Sie darüber nachdenken. Es werden jedoch mod_rewrite-Regeln angewendet, die für den gesamten Host gelten.

Entschuldigung, ich kann hier einen Kommentar eingeben, der von mod_jk zurückgegeben wird. Sieht aus, als würde der reguläre Ausdruck nicht zu der zurückgegebenen Seite passen.

Versuchen Sie, alle zu http://server.example/redirect.html:

umzuleiten
RewriteRule .* http://server.example/redirect.html [R=301,L]

Wenn dies funktioniert, ist es der reguläre Ausdruck, der Sie stört.

Lassen Sie mich etwas erklären.

Sie haben eine URI, die wie folgt aussieht: http://foo.bar.com/anything

Ihr regulärer Ausdruck (/.*) sucht jetzt nach einem Schrägstrich gefolgt von etwas. Aber im Uri gibt es kein/in "irgendetwas".

Wenn Sie ein Bild haben: z.B.

http://foo.bar.com/images/image.png dann gibt es ein/in images/image.png und der reguläre Ausdruck stimmt überein und führt die Weiterleitung durch.

Wenn Sie einen Server auf einen anderen Server umleiten möchten:

http://foo.bar.com/somesite -> http://bar.foo.com verwenden Sie

RewriteRule somesite.* http://server.example/redirect.html [R=301,L]

Entschuldigung, ich kann es nicht kommentieren, aber als Antwort auf Ihre Antwort Antitribu könnten Sie die Umschreibungsanweisungen auch in einen <Location> -Kontext einfügen. Es gibt einen schönen Abschnitt des Apache-Handbuchs, in dem beschrieben wird, wann & lt; Datei & gt ;, & lt; Ort & gt ;, .htaccess usw. verwendet wird.