我正在使用 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
to [^\s]+
即使有一个物理文件匹配search.jsf
.
其他所有规则都有last="true"
因为它们都不应该重叠(显然,除了这个包罗万象的东西)。
我读了UrlRewriteFilter 手册 http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html#condition除此之外似乎找不到任何东西last="true"
从理论上讲,如果已经找到一个匹配项,这应该会阻止该过程检查其他匹配项。
非常感谢!
EDIT:由于缺乏答案并且我无法解决这个问题,我检查了另一种方法。参考这个问题在这里。 https://stackoverflow.com/questions/18258085/custom-jsf-404-get-requested-url?lq=1
我对塔基一无所知,但我可以想到两个简单的解决方案:
1创建一个搜索规则,就像重写一个 url 一样/search?q=foo
to /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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)