【发布时间】:2011-01-14 15:47:45
【问题描述】:
我的 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- Forbidden 错误的 catch all 规则。
上面的代码很接近,但不完全在那里。包罗万象的最终规则是捕获太多。如果规则 1 匹配,则规则 3 也会捕获它并返回 403。
我们如何编写这样规则 1 和 2 的工作方式如上,但如果它们不匹配,则返回 403 错误?
谢谢
【问题讨论】:
标签: java apache mod-rewrite