У меня 2 сервера, Apache и Jboss. При использовании JKmount .war файлы монтируются и представляют собой сложный сайт.
например:
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>
Я хотел бы использовать mod_rewrite на стороне Apache, чтобы изменить URL-адреса, возвращаемые mod_jk.
например:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192.168.1.1$
RewriteRule /.* http://server.example/redirect.html [R=301,L]
В настоящее время приведенный выше код влияет только на изображения, возвращаемые Apache, но не на страницы, возвращаемые mod_jk.
Это возможно? Как это делается?
Аналогичный вопрос задан на Переполнение стека однако, имея выбор, если это возможно, я хотел бы обрабатывать это внутреннее для Apache, а не изменять конфигурацию Jboss.
Сервер - OpenSuse 11.1, и я подозреваю, что могут быть некоторые проблемы с порядком приоритета модулей, однако я не смог это подтвердить.
Примеры URL-адресов:
http://site.example/directory/index.jsp
http://site.example/foo/other.html
В этом примере первый URL-адрес монтируется в mod_jk с использованием директив, перечисленных в конфигурации выше, и НЕ будет перезаписан mod_rewrite. Второй URL-адрес - это обычный каталог на сайте Apache, он правильно переписан.
Спасибо всем
После долгих поисков я нашел ответ на этот вопрос.
Директива rewrite должна быть размещена глобально для (виртуального) хоста, а не в или в .htaccess. Кажется, что Apache на самом деле не анализирует эти файлы, поскольку файлы, обслуживаемые из mod_jk, не являются частью этой структуры; что имеет смысл, если задуматься. Однако он будет применять правила mod_rewrite, которые применяются ко всему хосту.
извините, не могу комментировать, я новичок здесь ... вы можете привести пример URL, который возвращается из mod_jk. Похоже, регулярное выражение не подходит для возвращаемой страницы.
Попробуй все перенаправить на http: //server.example/redirect.html:
RewriteRule .* http://server.example/redirect.html [R=301,L]
Если это работает, вас беспокоит регулярное выражение.
Позвольте мне немного объяснить.
у вас есть URI, который выглядит так: http://foo.bar.com/anything
Ваше регулярное выражение (/.*)
теперь ищет косую черту, за которой следует что-то. Но в Uri нет «ничего».
Если у вас есть изображение: например,
http://foo.bar.com/images/image.png чем есть / in images / image.png, и регулярное выражение соответствует и выполняет перенаправление.
Если вы хотите перенаправить какой-либо сайт на другой Сервер:
http://foo.bar.com/somesite -> http://bar.foo.com использовать
RewriteRule somesite.* http://server.example/redirect.html [R=301,L]
Извините, не могу комментировать, но в ответ на ваш ответ Antitribu вы также можете поместить операторы перезаписи в <Location>
контекст. Есть хороший раздел руководства по apache, в котором описывается, когда использовать <File>, <Location>, .htaccess и т. д..