2014-12-16 3 views
3

я пытаюсь переписать URL в апача, который внутренне перенаправлять запросы к Apache tomacatАпач правила перезаписи не работают после добавления прокси пройти

Вот мой httpd.conf код

<IfModule mod_rewrite.c> 

    ProxyRequests Off 
    ProxyVia Off 
    ProxyPreserveHost On 
    ProxyPass/http://localhost:8080/myapp/my.html 
    ProxyPassReverse/http://localhost:8080/myapp/my.html 

    RewriteEngine on 
    RewriteRule ^/(.*)/$ http://localhost:8080/myapp/my.html?product=$1 [QSA] 
</IfModule> 

Так что в основном то, что я пытаюсь сделать, это если я вхожу в localhost/myapp, тогда он должен перенаправить меня на localhost: 8080/myapp/my.html

Далее, если я ввожу URL localhost/myapp/8 он должен перенаправлять внутренне на localhost: 8080/myapp/my.html? product = 8.

Теперь проблема заключается в том, что ProxyPass работает абсолютно нормально. Но правило перезаписи показывает ошибку 404. Если я удалю код ProxyPass, то будет выполнено одно и то же правило перезаписи, но в браузере будет отображаться измененный URL-адрес. Итак, я хочу знать, где я должен разместить RewriteRule, чтобы заставить его работать с ProxyPass, а в правиле rewrite отображаются измененные URL-адреса?

+0

Я тоже застрял в этой подобной проблеме. У вас есть решение? – david

+0

Пока нет. Пожалуйста, сообщите, если вы когда-нибудь получите решение. @David – annonymous

ответ

0

Вам необходимо добавить флаг [P] на номер RewriteRule. Это приводит к тому, что RewriteRule «прокси» совпадает с вашей директивой ProxyPass. На данный момент ваше правило не имеет никакого смысла. В качестве альтернативы вы могли бы сделать что-то вроде:

RewriteRule ^/(.*)/$ /myapp/my.html?product=$1 [QSA,PT] 

которая должна привести к URL переписать, а затем пропускают через (это происходит из-за PT флага) для всех оставшихся модулей, которые необходимо обработать путь URI, в этом случае прокси-модуль.

FYI Терминология неверна, когда вы говорите if i enter localhost/myapp then it should redirect me to localhost:8080/myapp/my.html, вы действительно имеете в виду if i enter localhost/myapp then it should proxy to localhost:8080/myapp/my.html. Переадресация - это внешний ответ, в котором браузер запрашивает новый URL-адрес, а текст в адресной строке браузера изменится.

Помните, что с вашей текущей конфигурацией запрос localhost/ будет прокси до localhost:8080/myapp/my.html. Поэтому, если вы можете указать, что правильно, это поможет.

Смежные вопросы