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 与 DispatcherType.ERROR 和 404 错误代码检查
- 使用OCPSoft重写解决方案。不确定如何在不将所有映射加载到配置中的情况下执行此操作。我更喜欢动态(惰性)方法。
现在我实现了 @WebFilter 版本,使用注入的 bean 来查找映射。
我将从包含 rewrite-integration-cdi
模块开始:
然后创建一个可以访问您的数据库的 CDI bean/Java class。
将 class 的一个实例注入您的 Rewrite ConfigurationProvider
,然后使用它来构建/创建您的 Rewrite 规则。
这里是 @Inject
将 bean 添加到您的 ConfigurationProvider 中并定义自定义 HTTP 操作的示例:
根据您希望数据库查找的动态程度,您可以在启动时(构建配置时)预加载它们,或者使用自定义加载并在 Request/Response 生命周期本身内缓存它们HttpCondition
和`HttpOperation:
然后在您的 ConfigurationProvider
中使用这些操作来执行数据库操作。本质上你会做这样的事情,但是检查数据库以查看请求的 URL 是否是“known/stored”重定向:
然后使用自定义 HttpOperation
执行您要执行的操作。
从技术上讲,您也可以只使用匹配所有请求的 Condition
,以及仅在有数据库条目时才采取行动的 HttpOperation
。
综上所述,这听起来比实际情况要复杂,但我找不到很好的例子来 link 完全符合您的要求,所以我正在尝试将其拼凑起来。
由于旧网站使用了不同的 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 与 DispatcherType.ERROR 和 404 错误代码检查
- 使用OCPSoft重写解决方案。不确定如何在不将所有映射加载到配置中的情况下执行此操作。我更喜欢动态(惰性)方法。
现在我实现了 @WebFilter 版本,使用注入的 bean 来查找映射。
我将从包含 rewrite-integration-cdi
模块开始:
然后创建一个可以访问您的数据库的 CDI bean/Java class。
将 class 的一个实例注入您的 Rewrite ConfigurationProvider
,然后使用它来构建/创建您的 Rewrite 规则。
这里是 @Inject
将 bean 添加到您的 ConfigurationProvider 中并定义自定义 HTTP 操作的示例:
根据您希望数据库查找的动态程度,您可以在启动时(构建配置时)预加载它们,或者使用自定义加载并在 Request/Response 生命周期本身内缓存它们HttpCondition
和`HttpOperation:
然后在您的 ConfigurationProvider
中使用这些操作来执行数据库操作。本质上你会做这样的事情,但是检查数据库以查看请求的 URL 是否是“known/stored”重定向:
然后使用自定义 HttpOperation
执行您要执行的操作。
从技术上讲,您也可以只使用匹配所有请求的 Condition
,以及仅在有数据库条目时才采取行动的 HttpOperation
。
综上所述,这听起来比实际情况要复杂,但我找不到很好的例子来 link 完全符合您的要求,所以我正在尝试将其拼凑起来。