gpt4 book ai didi

java - mod_rewrite RewriteRule if-then-else 麻烦

转载 作者:行者123 更新时间:2023-11-30 09:51:21 25 4
gpt4 key购买 nike

我的 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 错误的捕获所有规则。

上面的代码很接近,但还不够。万能的最终规则是捕获太多。如果规则 1 匹配,那么规则 3 也会捕获它并返回 403。

我们如何编写才能使规则 1 和 2 像上面那样工作,但如果它们不匹配,则返回 403 错误?

谢谢

最佳答案

使用[L] 标志,这个标志意味着如果匹配则停止重写过程。因此,为 1st 和 第二个标签添加此标签。

编辑--

too fast;:您还需要将 [C] 标记添加到第一条规则,以便它与第二条规则链接,这使得第二条规则在第一条匹配时运行。只有第二个需要 [L]

结束编辑--

关于 rewriteMap prg,apache 文档要求在不匹配的情况下返回'NULL',而不是'error'。

如果您仍然对 mod-rewrite 有疑问并且担心 apache mod-rewrite 文档,请查看关于 servfault 的优秀文档:everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-ask

关于java - mod_rewrite RewriteRule if-then-else 麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com