ISAPI Rewrite не перенаправляет запрос со строкой запроса - PullRequest
1 голос
/ 19 июля 2010

Я установил полную версию isapi_rewrite и настроил директиву прокси, чтобы весь трафик на мою рабочую станцию ​​в папке 'ngis' (на любом порту) направлялся на другой сервер. Это в целях тестирования, чтобы проверить пригодность перед развертыванием isapi_redirect на наших серверах prod.

У меня есть следующее правило:

RewriteRule ^ngis/(.+)$ http://10.2.25.157:8080/ngis/$1 [NC, P]

Это прекрасно работает, когда я ввожу URL следующим образом:

http://10.1.111.20:8080/ngis/QueryEngine.ptl/DocTree(%60/2007/MELBOURNE/R01%60,%601%60).xml

Однако, если я введу UIRL со строкой запроса, например:

http://10.1.111.20:8080/ngis/QueryEngine.ptl/DocTree(%60/2007/MELBOURNE/R01%60,%601%60).xml?VIEW=RAW

Я получаю сообщение об ошибке "Страница не найдена".

При просмотре журналов шаги выглядят одинаково. Вот запись в журнале для двух запросов выше:

[10.1.111.20/sid#1][rid#11050940/initial] (2) init rewrite engine with requested uri /ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request c:\inetpub\wwwroot\.htaccess
[10.1.111.20/sid#1][rid#11050940/initial] (3) applying pattern '^ngis/(.+)$' to uri 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml'
[10.1.111.20/sid#1][rid#11050940/initial] (2) forcing proxy-throughput with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml
[10.1.111.20/sid#1][rid#11050940/initial] (1) go-ahead with proxy request http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml [OK]
[10.1.111.20/sid#1][rid#11050940/initial] (1) Rewrite URL to >> http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2
[10.1.111.20/sid#1][rid#11050940/initial] (2) rewrite 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml' -> 'http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2'
[10.1.111.20/sid#1][rid#11050940/initial] (2) internal redirect with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xmlx.rwhlp?p=2 [INTERNAL REDIRECT]

[10.1.111.20/sid#1][rid#11050940/initial] (2) init rewrite engine with requested uri /ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request C:\Program Files\Helicon\ISAPI_Rewrite3\httpd.conf
[10.1.111.20/sid#1][rid#11050940/initial] (1) Htaccess process request c:\inetpub\wwwroot\.htaccess
[10.1.111.20/sid#1][rid#11050940/initial] (3) applying pattern '^ngis/(.+)$' to uri 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml'
[10.1.111.20/sid#1][rid#11050940/initial] (2) forcing proxy-throughput with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW
[10.1.111.20/sid#1][rid#11050940/initial] (1) go-ahead with proxy request http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAW [OK]
[10.1.111.20/sid#1][rid#11050940/initial] (1) Rewrite URL to >> http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2
[10.1.111.20/sid#1][rid#11050940/initial] (2) rewrite 'ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml' -> 'http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2'
[10.1.111.20/sid#1][rid#11050940/initial] (2) internal redirect with http://10.2.25.157:8080/ngis/QueryEngine.ptl/DocTree(`/2007/MELBOURNE/R01`,`1`).xml?VIEW=RAWx.rwhlp?p=2 [INTERNAL REDIRECT]

Как вы можете видеть, что касается isapi_rewrite, он сделал свое дело. Однако я могу подтвердить, что целевой сервер не получает запрос (поскольку мы отлаживаем его в то время, чтобы попытаться диагностировать проблему!)

Похоже, что проблема вызвана наличием '?' и некоторые параметры строки запроса.

Я пробовал оба RewriteRule и RewriteProxy и получаю ту же проблему.

Есть идеи? Приветствия.

Ответы [ 3 ]

0 голосов
/ 20 июля 2010

Я попробовал флаг [QSA], но страница все еще, кажется, выдает 404, даже не делая запрос к удаленному серверу.Компонент (насколько я могу судить) при установке для isapi_rewrite 3 создал обработчик для расширения .rwhlp - похоже, именно так он и работает.Однако запрос к целевому серверу не включает эту дополнительную часть в URL.

0 голосов
/ 27 июня 2014

Вы должны разбить строку query_string следующим образом:

RewriteCond %{QUERY_STRING} ^p=2$ [NC]

RewriteRule ^x\.rwhlp$ NewLocation [NC,R=301,P]

Каждый раз, когда вы нажимаете «?», Вы должны прерывать что-либо после «?»к условию query_string.Таким образом, URL должен быть разбит на части для обработки строки и вызова страницы.

0 голосов
/ 19 июля 2010

В apache мы используем флаг [QSA], чтобы добавить исходную строку запроса, не уверен насчет isapi_rewrite. Откуда приходит этот призрачный x.rwhlp?p=2 аппендикс?

...