首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使gwt网站不带散列符号可抓取?

使gwt网站不带散列符号可抓取?
EN

Stack Overflow用户
提问于 2014-08-27 08:14:26
回答 1查看 247关注 0票数 3

在GWT中,我们需要在URL中使用#从一个页面导航到另一个页面,即为eg创建历史记录。www.abc.com/#questions/10245857,但由于这个原因,我在分享网址时遇到了一个问题。谷歌的剪贴者只在# (即www.abc.com )之前读取网址。

现在,我想从我的url中删除#,并将其保持为www.abc.com/question/10245857

我不能这样做。我该怎么做?

当用户导航应用程序时,我使用散列urls和History对象(至于不重新加载页面)。然而,有时很好/需要有一个漂亮的URL (例如,用于共享、公开显示等等)。所以我想知道如何提供相同页面的漂亮URL。

注:

我们必须这样做,使我们的网页网址可爬行,并链接到外部世界的网站。

EN

Stack Overflow用户

回答已采纳

发布于 2014-08-29 00:57:14

这里有三个问题,每个问题都可以解决:

  1. 对于用户来说,URL应该更漂亮
  2. 直接访问漂亮的URL应该有效。
  3. WebCrawlers应该能够获得内容

这些似乎都是同一个问题,但在这方面它们是截然不同的。

显示漂亮的URL

可以使用一个使用HTML5状态方法的小javascript文件来完成。您可以看到一个简单的演示这里,使用来源在这里。这使得对"#“的所有更改都没有"#”(在现代浏览器上)。

小提琴的相关代码:

代码语言:javascript
复制
var stateObj = {locationHash: hash};
history.replaceState(stateObj, "Page Title", baseURL + hash.substring(1));

回复到漂亮的URL

这是相对简单的,只要GWT中有一个侦听器可以基于页面加载的"#“加载。您只需抛出一个简单的重定向servlet,当请求传入时,它将重新插入"#“标记。

对于servlet,侦听漂亮的URL:

代码语言:javascript
复制
if(request.getPathInfo()!=null && request.getPathInfo().length()>1){
    response.sendRedirect("#" + request.getPathInfo());
    return;
}

或者,您可以从这个servlet直接提供GWT应用程序,并使用URL中的参数初始化它,但是需要注意一些相对路径簿记。

WebCrawlers

这是最难对付的。基本上,这里不能有静态(Ish)页面。如果你索引的是有限的简单状态,那就不难了。一个简单的方案是有一个单独的servlet,它以最小格式的HTML返回通常用GWT获取的原始内容。这个servlet可以有一个不同的URL模式,比如"/indexing/“。这些不是人类的,只是网络爬虫用的。您可以在页面加载后将一个简单的javascript附加到将用户重定向到漂亮的url中。

下面是这样一个servlet的doGet方法的示例:

代码语言:javascript
复制
response.setContentType("text/html;charset=UTF-8");
response.setStatus(200);
pw = response.getWriter();
pw.println("<html>");
pw.println("<head><script>");
pw.println("window.location.href='http://www.example.com/#"
        + request.getPathInfo() + "';");
pw.println("</script></head>");
pw.println("<body>");
pw.println(getRawPageContent(request.getPathInfo()));
pw.println("</body>");
pw.println("</html>");
pw.flush();
pw.close();
return;

然后,您应该有一些链接到这些索引页面隐藏在您的主应用程序URL (或后面的链接在您的主应用程序URL)。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25522085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档