尝试在不使用HashBang #!
的情况下让Google完全抓取我的Angular应用生成页面。所以我用:
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
已添加到应用的配置中,
<base href="/hockey-att/">
<meta name="fragment" content="!">
到html标题。
我在.htaccess
:
RewriteEngine on
RewriteBase /1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ #/$1 [L]
<IfModule mod_headers.c>
RequestHeader set X-Prerender-Token "prerendertoken"
</IfModule>
<IfModule mod_rewrite.c>
<IfModule mod_proxy_http.c>
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} baiduspider|googlebot|googlebot-mobile|bingbot|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_=(\%2F|/)_(._)
# Only proxy the request to Prerender if it's a request for HTML
RewriteRule ^(?!.*?(\.js|\.css|\.xml|\.less|\.png|\.jpg|\.jpeg|\.gif|\.pdf|\.doc|\.txt|\.ico|\.rss|\.zip|\.mp3|\.rar|\.exe|\.wmv|\.doc|\.avi|\.ppt|\.mpg|\.mpeg|\.tif|\.wav|\.mov|\.psd|\.ai|\.xls|\.mp4|\.m4a|\.swf|\.dat|\.dmg|\.iso|\.flv|\.m4v|\.torrent|\.ttf|\.woff))(.*) http://service.prerender.io/http://%{HTTP_HOST}/$2 [P,L]
</IfModule>
</IfModule>
我将子文件夹1
中的应用程序和.htaccess中的RequestHeader set X-Prerender-Token
部分设置为prerender.io令牌。
使用新网址的应用程序运行正常,并使用prerender.io呈现页面。页面已预呈现,可通过http://service.prerender.io/ {{http://myurl.com/page}}
无障碍地访问我的问题是,Google抓取工具无法访问预呈现的网页。通过搜索控制台的抓取功能尝试使用和不使用?_escaped_fragment_=
添加到已获取的网址的Google功能。但它仍然在其源代码中获得带有角度指令的原始页面。
我认为我在.htaccess中遗漏了一些东西,但我不知道是什么。
将ui-router用于角度状态。
答案 0 :(得分:0)
您似乎将所有请求重定向到#URL:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ #/$1 [L]
这是对的吗?如果是这样,该代码阻止在每个请求上运行Prerender配置。
如果您使用的是html5推送状态,是否可以删除该部分,因为您不需要重定向到#URL。