如何用UrlRewriteFilter实现地址栏URL截断为固定短链接?
UrlRewriteFilter 实现地址栏固定显示根域名的规则配置
核心思路
要实现地址栏显示固定短链接,必须使用**外部重定向(redirect)**而非内部转发(forward)——因为内部转发不会修改浏览器地址栏,这是多数配置无效的关键原因。规则需覆盖所有目标路径(/s/、/s/v、带参数的/s/v/?xxx等),并确保重定向后不会触发循环。
具体规则配置(urlrewrite.xml)
<urlrewrite> <!-- 匹配所有以/s/开头的路径(含子路径、带参数的情况) --> <rule> <from>^/s/(.*)$</from> <to type="redirect">https://www.domaine.com/</to> </rule> <!-- 单独匹配不带斜杠的/s/v路径(避免被第一个规则遗漏) --> <rule> <from>^/s/v$</from> <to type="redirect">https://www.domaine.com/</to> </rule> </urlrewrite>
规则细节说明
- 正则匹配逻辑:
^/s/(.*)$匹配所有以/s/开头的请求,包括/s/、/s/v/、/s/v/?foo=bar等;^/s/v$专门匹配不带结尾斜杠的/s/v路径,避免遗漏。
- 重定向类型:
type="redirect"会触发浏览器302临时重定向(如需永久重定向,可改为type="redirect-permanent"),强制浏览器更新地址栏为目标URL。 - 避免循环:重定向后的路径是根域名
/,不会匹配任何规则的from正则,因此不会出现循环重定向问题。
额外注意事项
- 确保Web项目中
web.xml里的UrlRewriteFilter映射范围为/*,让所有请求都经过过滤器:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 若需保留原请求的GET参数(需求中未提及,仅作补充),可在
to标签中添加%{query-string},例如:<to type="redirect">https://www.domaine.com/?%{query-string}</to>。
内容的提问来源于stack exchange,提问作者faobek
相关产品推荐
相关产品推荐

