JSF - 如何通过拦截和重定向潜在的 404 错误来迁移 URL?

JSF - How to migrate URLs by intercepting and redirecting potential 404 errors?

由于旧网站使用了不同的 URL 结构或技术,因此迁移网站时经常发生 URL 死机。正确的 301“永久”重定向对于 SEO 友好迁移很重要。

示例:

旧页面 https://example.com/product/coca-cola-bottle.html 在我们的 JSF 项目中移动到 https://example.com/p/coca-cola-1-l/1000

概念

我们会将这些映射保存在我们的数据库中,并将它们添加到我们的 JSF 应用程序中。

如果请求的 URL 无效或重写,我们要检查当前请求的 URL 是否存在于我们的数据库中并重定向到新目标。

一些想法?

现在我实现了 @WebFilter 版本,使用注入的 bean 来查找映射。

我将从包含 rewrite-integration-cdi 模块开始:

https://github.com/ocpsoft/rewrite/blob/master/documentation/src/main/asciidoc/integration/cdi.asciidoc

然后创建一个可以访问您的数据库的 CDI bean/Java class。

将 class 的一个实例注入您的 Rewrite ConfigurationProvider,然后使用它来构建/创建您的 Rewrite 规则。

这里是 @Inject 将 bean 添加到您的 ConfigurationProvider 中并定义自定义 HTTP 操作的示例:

https://github.com/ocpsoft/rewrite/blob/master/showcase/rest-ws/src/main/java/org/ocpsoft/rewrite/showcase/rest/RestRewriteConfiguration.java

根据您希望数据库查找的动态程度,您可以在启动时(构建配置时)预加载它们,或者使用自定义加载并在 Request/Response 生命周期本身内缓存它们HttpCondition 和`HttpOperation:

https://github.com/ocpsoft/rewrite/blob/master/api-servlet/src/main/java/org/ocpsoft/rewrite/servlet/config/HttpCondition.java

https://github.com/ocpsoft/rewrite/blob/master/api-servlet/src/main/java/org/ocpsoft/rewrite/servlet/config/HttpOperation.java

然后在您的 ConfigurationProvider 中使用这些操作来执行数据库操作。本质上你会做这样的事情,但是检查数据库以查看请求的 URL 是否是“known/stored”重定向:

https://github.com/ocpsoft/rewrite/blob/851ccbabb8b6248c66589076fa67cb0ec07b3132/impl-servlet-tests/src/test/java/org/ocpsoft/rewrite/servlet/config/HttpRequestParameterTestProvider.java#L45

然后使用自定义 HttpOperation 执行您要执行的操作。

https://github.com/ocpsoft/rewrite/blob/851ccbabb8b6248c66589076fa67cb0ec07b3132/config-servlet/src/test/java/org/ocpsoft/rewrite/servlet/config/JoinBindingConfigurationProvider.java#L48

从技术上讲,您也可以只使用匹配所有请求的 Condition,以及仅在有数据库条目时才采取行动的 HttpOperation

综上所述,这听起来比实际情况要复杂,但我找不到很好的例子来 link 完全符合您的要求,所以我正在尝试将其拼凑起来。