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/