ajax - 我如何删除 ?_escaped_fragment_= 使用 .htaccess

标签 ajax .htaccess mod-rewrite seo

Google 发现我允许最终用户使用 ajax 加载来浏览我的内容,并且将我的页面作为用户客户端加载,而不是在新页面加载时请求它们。因此,它不是尝试索引 www.mysite.com/page,而是请求 www.mysite.com/?_escaped_fragment_=/page

这根本不是我想要的。我的快照在与 ajax 加载内容相同的 URL 上提供。该网站没有使用查询,它不支持它们,我不想建立这种支持。这意味着所有页面在谷歌上看起来都已损坏,这当然很不幸!

目前,所有页面请求都使用 .htaccess 将请求重定向到服务器端,将请求发送到 index.php 文件,该文件在服务于客户端之前在服务器上编译 html 文档。该站点为所有页面提供完全有效且唯一的 html 文档。但是 google 坚持使用 ajax 方式并添加始终返回损坏页面的查询。

我不是 .htaccess 专家,但在我看来,解决这个问题的最简单方法是重写请求,删除 ?_escaped_fragment_=/位并将任何此类请求永久重定向到当前可用的内容使用正确的 url 加载页面。

有人知道我会怎么做吗?下面是我的 .htaccess 文件的当前重定向部分,需要使用 _escaped_fragment_ 剥离代码进行修改:

<IfModule mod_rewrite.c>
  RewriteEngine on 
  RewriteBase /

  #if trailing / remove it with a permanent redirect
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)/$ /$1 [L,R=301]

  #if missing www. add it with a permanent redirect
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301] 

  #requests for index.php never rewritten
  RewriteRule ^index\.php$ - [L]

  #if file or directory are missing, route to index.php
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

最佳答案

这就是我重写它的方式,以便所有 ?_escaped_fragment_=/XXXXX 请求都在没有查询的情况下重定向到/XXXXX

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%1? [L,R=301]

这使得 www.domain.com/?_escaped_fragment_=/somepage 重定向(永久)到 www.domain.com/somepage

...这正是我想要的。

关于ajax - 我如何删除 ?_escaped_fragment_= 使用 .htaccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804675/

相关文章:

apache - mod_jk 不适用于 apache2.2 和 tomcat7

javascript - ASP.NET MVC4 添加评论后刷新 View

javascript - 如何将行号插入到 ajax 函数中?

javascript - 表单序列化总是返回空字符串

java - 让 Selenium 通过 .htaccess 弹出窗口登录

php - 选择和浏览存储在单独表中的类别和子类别

javascript - 一旦所有请求都完成,我们如何确定哪个ajax因多个ajax请求而失败?

apache - .htaccess 更改需要多长时间才能生效?

.htaccess - 在 URL 中隐藏目录,同时保留其他文件

regex - htaccess重写匹配问号