0

迁移网站时,由于旧网站使用不同的 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 是否存在于我们的数据库中并重定向到新目标。

一些想法?

  • 如果找不到资源,则创建自定义异常处理程序并重定向
  • 覆盖导航处理程序以在异常处理程序之前处理它
  • @WebFilterDispatcherType.ERROR404错误代码检查一起使用
  • 使用 OCPSoft 重写解决方案。如果不将所有映射加载到配置中,不确定如何执行此操作。我更喜欢动态(惰性)方法。

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

4

1 回答 1

1

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

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

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

将该类的一个实例注入到您的 RewriteConfigurationProvider中,然后使用它来构建/创建您的 Rewrite 规则。

这是一个将@Injectbean 放入 ConfigurationProvider 并定义自定义 HTTP 操作的示例:

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

根据您希望数据库查找的动态程度,您可以在启动时(构建配置时)预加载它们,或者使用自定义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 是否是“已知/存储”重定向:

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与所有请求匹配的 a,而HttpOperationThat 仅在存在数据库条目时才采取行动。

话虽如此,这听起来比它更复杂,但是我找不到很好的例子来链接到你想要的东西,所以我试图把它拼凑起来。

于 2021-11-27T15:52:34.667 回答