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

How do I strip out ?_escaped_fragment_= using .htaccess

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

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

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

我不是 .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 ^(.*)/$ / [L,R=301]

  #if missing www. add it with a permanent redirect
  RewriteCond %{HTTP_HOST} !^www\.
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [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

...这正是我想要的。