Моя конфигурация Apache использует mod_rewrite для вызова внешнего приложения (используя RewriteMap prg) для перезаписи URL.Это отлично работает.Мне нужно обработать граничные условия, где URL-адрес запроса не совпадает с искомым URL-адресом.Кроме того, внешнее приложение возвращает ошибку, нам нужно перенаправить на страницу ошибки.
Вот код:
RewriteMap forwardURL "prg:\"C:/Program Files/Java/jdk1.6.0_11/bin/java.exe\" -jar \"C:/app/Mapper.jar\""
RewriteLock bin\map.sub.lock
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/SomeScript.asp(.*)$ ${forwardURL:%{QUERY_STRING}}
RewriteRule ^/error(.*)$ /error.html [L]
RewriteRule ^(.*)$ - [F]
Когда мы получаем запрос для нашего старого сценария ASP (SomeScript.asp), приложение Java вызывается для поиска правильного URL.Он либо вернет правильный URL, либо "/ error".Если возвращается «/ error», мы хотим, чтобы RewriteRule изменил его на страницу ошибки.Таким образом, правила 1 и 2 связаны между собой.Если правило 1 выполняется, правило 2 должно выполняться.Если правило 1 и правило 2 совпадают, то правило 3 не должно выполняться.Правило 3 - это правило «поймай все», которое возвращает ошибку 403 «Запрещено».
Приведенный выше код близок, но не совсем там.Всеобщее последнее правило - это слишком много.Если правило 1 соответствует, то правило 3 также поймает его и вернет 403.
Как мы можем написать это так, чтобы правила 1 и 2 работали, как указано выше, но если они не совпадают, ошибка 403вернулся?
Спасибо