gpt4 book ai didi

regex - JSF UrlRewriteFilter catchall/404 替换

转载 作者:行者123 更新时间:2023-11-28 21:52:38 25 4
gpt4 key购买 nike

我正在使用 Tuckey UrlRewrite 设置 URL 规则。到目前为止一切正常,但我在使用默认页面时遇到了困难。

目标:- 任何与现有文件不匹配的请求;或者- 任何不符合先前规则的请求...应该通过 search.jsf?q= 启动搜索。它旨在处理来自旧网站的任何可能的死链接,并用功能更强大的内容替换 404 页面(以帮助用户找到他实际正在寻找的内容)。

部分代码(其他规则与第2条类似,只是“默认”规则导致崩溃):

<rule>
<name>Home</name>
<from>^/$</from>
<to type="forward" last="true">/home.jsf</to>
</rule>

<rule>
<name>Contact Us</name>
<from>^/contact_us/?$</from>
<to type="forward" last="true">/contactUs.jsf</to>
</rule>

<rule>
<name>Default + 404</name>
<from>^/[^\s]+$</from>
<to type="forward">^/search.jsf?q=$1</to>
</rule>

它会导致堆栈溢出,因为它将 search.jsf 匹配到 [^\s]+,即使有一个物理文件匹配 search.jsf.

所有其他规则都有 last="true",因为它们都不应该重叠(显然除了这个包罗万象)。

我读了UrlRewriteFilter manual并且似乎找不到除了 last="true" 之外的任何东西,理论上,如果它已经找到一个匹配项,它应该停止检查其他匹配项。

非常感谢!

编辑: 由于缺乏答案并且我无法解决这个问题,我检查了另一种方法。引用this question here.

最佳答案

我对 tuckey 一无所知,但我可以想到两个简单的解决方案:

1 创建一个搜索规则,将 /search?q=foo 这样的 url 重写为 /search.jspf?q=foo

我猜是这样的:

<rule>
<name>Search</name>
<from>^/search\?(.*)$</from>
<to type="forward" last="true">/search.jsf?\1</to>
</rule>

然后只需将您的默认规则更改为使用 /search 而不是实际文件 /search.jspf:

<rule>
<name>Default + 404</name>
<from>^/[^\s]+$</from>
<to type="forward">^/search?q=$1</to>
</rule>

2 重写您的默认规则的匹配正则表达式以使用否定先行专门排除 search.jspf:

<rule>
<name>Default + 404</name>
<from>^/(?!search.jspf)[^\s]+$</from>
<to type="forward">^/search.jspf?q=$1</to>
</rule>

关于regex - JSF UrlRewriteFilter catchall/404 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240770/

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