Настройка mod_rewrite и mod_jk для Apache 2.2 и JBoss 4.2.3 - PullRequest
2 голосов
/ 12 марта 2010

Моя проблема заключается в следующем: у меня сервер приложений JBoss 4.2.3 с коннектором AJP 1.3, работающий на одном хосте под Windows (192.168.1.2 для моей тестовой среды) и Apache 2.2.14, работающий на другом компьютере FreeBSD (192.168.1.10 ). Apache действует как «передний вход» для всех запросов и отправляет их в JBoss через mod_jk. Все работало нормально, пока мне не пришлось оптимизировать SEO. Эти оптимизации включают URL-адреса SEF, поэтому я решил использовать mod_rewrite для Apache для изменения запросов перед их отправкой в ​​JBoss. По сути, мне нужно реализовать 2 правила:

Вот мой конфиг Apache для тестового виртуального хоста:

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/www/dummy"
ServerName 192.168.1.10

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteRule /directory/(.*) /$1 [R=permanent,L]
    RewriteRule ^/([^/]+)/([0-9]+)/?$   /$1/view.htm?id=$2

</IfModule>

JkMount     /*      jsp-hostname

ErrorLog "/var/log/dummy-host.example.com-error_log"
CustomLog "/var/log/dummy-host.example.com-access_log" common
</VirtualHost>

Проблема в том, что второе правило перезаписи не работает. Запросы проскальзывают в JBoss без изменений, поэтому я получаю ошибку Tomcat 404. Но если я добавлю флаг перенаправления ко второму правилу, как

RewriteRule ^/([^/]+)/([0-9]+)/?$   /$1/view.htm?id=$2 [R,L]

это работает как шарм. Но перенаправление здесь не то, что мне нужно :). Я подозреваю, что проблема в том, что запросы перенаправляются на другой хост (192.168.1.2), но я действительно не знаю, как заставить его работать. Любая помощь будет оценена :) 1023 *

Ответы [ 2 ]

2 голосов
/ 12 апреля 2010

Причина, по которой ваше второе правило перезаписи не работает, заключается в том, что вы используете '?' в вашем определении URI, и определение URI никогда не содержит разделитель «?». Так что просто используйте правила переписывания без него. например.

RewriteRule ^/([^/]+)/([0-9]+)/$   /$1/view.htm?id=$2 [R,L]
0 голосов
/ 23 апреля 2012

Просто не работает, потому что первый RewriteRule имеет [L] в конце, что означает, что последнее правило должно обрабатываться.

...