【问题标题】:Java Servlet - Redirect URLJava Servlet - 重定向 URL
【发布时间】:2014-07-18 06:04:52
【问题描述】:

我网站的网址是www.example.com/?id=THEPRODUCTID#i,其中THEPRODUCTID 是一个字母数字字符串。请注意,#i 出现在末尾。

问题是谷歌爬虫忽略了Sitemap.xml上指定的#i,所以我在谷歌上看到的结果是www.example.com/?id=THEPRODUCTID

作为一个快速的解决方案,我想创建一个将www.example.com/?id=THEPRODUCTID 重定向到www.example.com/?id=THEPRODUCTID#i 的servlet。我不确定如何进行映射,或者它是否应该是过滤器、重定向、转发……非常感谢任何指导。

【问题讨论】:

  • 你为什么要依赖可选的fragment identifier
  • 我正在使用 GWT,我用它来加载查看器 (#i)、编辑 (#e) 等。我真的无法更改它。
  • 在 GWT 中,# 用作历史令牌。
  • 你能检查它是否不存在,默认为查看器。
  • 你在项目中是否使用了 GWT 历史记录?

标签: java servlets servlet-filters google-crawlers hashbang


【解决方案1】:

查看 url 重写,例如使用 Tuckey,您可以摆脱外部 url 的整个过程,并将其保留在后端。

您可以创建规则,让您的网址在用户端类似于www.example.com/product/THEPRODUCTID/i,并在后端转换为www.example.com/?id=THEPRODUCTID#i

【讨论】:

  • 谢谢!我正在尝试,但似乎它不能正常工作,也许是“?”在“到”? <urlrewrite> <rule> <from>/i/([a-zA-Z]+)</from> <to>/?id=$1#i</to> </rule> </urlrewrite>
  • to 中,尝试使用显式响应欢迎文件的 servlet 或 JSP:例如<to>/index.jsp?id=$1#i</to>
【解决方案2】:

# 之后的所有内容都称为片段,旨在用作浏览器的书签。服务器为 www.example.com/?id=THEPRODUCTID#i 和 www.example.com/?id=THEPRODUCTID 提供的内容将完全相同。

如果您按照建议构建重定向功能,所有对 ww.example.com/?id=THEPRODUCTID 的请求都将被重定向,而不仅仅是 Google 生成的链接。如果您对此表示满意,请使用以下内容在 servlet 内重定向

response.sendRedirect("/id=THEPRODUCTID#i?);

【讨论】:

  • 谢谢!我尝试了以下方法,但从未使用 www.example.com/?id=asdfasdf 调用 Servlet。也许是由于正则表达式? <servlet> <servlet-name>RedirectServlet</servlet-name> <servlet-class>com.a.m.server.RedirectServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RedirectServlet</servlet-name> <url-pattern>/?id=([a-zA-Z]+)</url-pattern> </servlet-mapping>
  • serlet 映射内容并不完全是传统的正则表达式。查看此链接以了解允许的内容:stackoverflow.com/questions/8570805/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 2017-12-30
  • 2012-09-28
  • 2019-10-27
  • 2012-08-10
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多