标签:
在定义了AngularJS代码的app.js中,我们需要这句代码添加到我们的路由配置中:$locationProvider.hashPrefix(‘!‘); 这个方法会重写你的URL。相对于标准的地址http://localhost:3000/#/home你的url地址看起来将会是类似http://localhost:3000/#!/home 的形式
如果你使用的是html5模式(html5Mode),你不会看到任何区别。
URL里面的#!非常重要,因为它会告诉爬虫你的程序有AJAX内容,需要它做一下AJAX抓取转换。
angular.module(‘myApp‘).config([ ‘$locationProvider‘, function($locationProvider) { $locationProvider.hashPrefix(‘!‘); } ]);
google等搜索引擎会识别带‘#!‘的地址把它转变为‘?_escaped_fragment_=’。
比如,谷歌发现的地址
http://www.example.com/#!/user/123
它会向服务器发送这种请求
http://www.example.com/?_escaped_fragment_=/user/123
angular.module(‘myApp‘).config([ ‘$locationProvider‘, function($locationProvider) { $locationProvider.hashPrefix(‘!‘); $locationProvider.html5Mode(true); } ]);
http://www.example.com/user/123
http://www.example.com/user/123?_escaped_fragment_=
<IfModule mod_headers.c> RequestHeader set X-Prerender-Token "your token" </IfModule> <IfModule mod_rewrite.c> RewriteEngine On # Don‘t rewrite files or directories RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] <IfModule mod_proxy_http.c> RewriteCond %{HTTP_USER_AGENT} baiduspider|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR] RewriteCond %{QUERY_STRING} _escaped_fragment_ # 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://example.com/$2 [P,L] </IfModule> # Rewrite everything else to index.html to allow html5 state links RewriteRule ^ index.html [L] </IfModule>
要确保mod_headers、 mod_rewrite、mod_proxy_http三个模块都已经启用。
标签:
原文地址:http://www.cnblogs.com/suiblog/p/5180360.html