我为客户端开发了一个带有Laravel后端和AngularJS的网站。 我在AngularJS中启用了html5mode,以便URL没有hashbang。
使用grunt我在snapshots文件夹中创建了快照。共有5页,每页都以snapshot__page.html的形式输出到snapshots文件夹。
我在Larvel routes文件中使用以下代码将所有请求重定向到索引文件,以便Angular可以处理其余的事情。
App::missing(function($exception)
{
return View::make('index');
});
可以使用
从浏览器访问该网站http://www.domain.com/
http://www.domain.com/page1
http://www.domain.com/page2
等,快照在
http://www.domain.com/snapshots/snapshot__.html
http://www.domain.com/snapshots/snapshot__page1.html
http://www.domain.com/snapshots/snapshot__page2.html
谷歌声明要包括
<meta name="fragment" content="!">
以便抓取工具按如下方式访问页面。
http://www.domain.com?_escaped_fragment=
http://www.domain.com/page1?_escaped_fragment=
http://www.domain.com/page2?_escaped_fragment=
我们可以为这样的请求提供快照。
我的问题在于.htaccess文件。
即使我使用&#34;?escaped_fragement =&#34;为了测试页面,索引页面被加载。这是Laravel捕获404路线并提供索引页面。 有很多关于如何为URL提供快照的文档?escaped_fragment =出现在URL之间。 这里讨论类似的问题
https://groups.google.com/forum/#!msg/angular/lK8M5bFwbkQ/FN1t1SYD3QkJ .htaccess for SEO bots crawling single page applications without hashbangs
但.htaccess提供的似乎并不起作用。
我的.htaccess文件如下。我正在摆弄.htaccess。
<IfModule mod_rewrite.c>
############################################
## enable rewrites
Options +FollowSymLinks
RewriteEngine on
#Access site only with www
RewriteCond %{HTTP_HOST} !domain\.com$
RewriteRule [domain]?(.*) http://www.domain.com/$1 [R=301,L]
#Snapshots for SEO
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=$
RewriteRule ^(.*)$ /snapshots/snapshot__$1.html [L,NC]
#Laravel Stuff
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 0 :(得分:0)
根据您的上述规范,此行有一个尾随下划线
RewriteCond%{QUERY_STRING} ^ _escaped_fragment _ = $