3

我正在使用 Tuckey UrlRewrite 设置 URL 规则。到目前为止一切正常,但是我在默认页面上苦苦挣扎。

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

部分代码(其他规则与第二条类似,只有“默认”规则使其崩溃):

<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 手册,似乎找不到任何东西last="true",理论上,如果它已经找到了其他匹配项,则应该停止该过程检查其他匹配项。

非常感谢!

编辑:由于缺乏答案并且我无法解决这个问题,我检查了另一种方法。请在此处参考此问题。

4

1 回答 1

1

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

1为搜索创建一个规则,就像重写一个/search?q=foourl/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>
于 2013-08-17T15:30:56.803 回答