我正在尝试在Laravel 4应用程序中使用Angular JS启用干净的URL。当我在没有laravel 4的情况下尝试所需的东西时,请参考此URL。
http://www.yearofmoo.com/2012/11/angularjs-and-seo.html,我能够让事情发挥作用。即使?_escaped_fragment_=
已更改为 snapshot / *文件夹并选择了内容。
但是我无法在Laravel 4中做同样的事情。我不知道该怎么做。
我正在尝试定义类似?_escaped_fragment_=/*
的路由并将其重定向到某个控制器,但这不起作用。
任何人都可以帮忙。
答案 0 :(得分:0)
Escaped fragment是一个查询参数,而不是路由,在根路由Route::get('/', 'RootCtrl');
中,您可以检查$_GET['_escaped_fragment']
是否存在,如果存在,则返回{{1} }重定向到快照目录中的相应文件。
虽然这可行,但它不是完美的解决方案,因为有些机器人可能会索引HTTP 302
文件的路径而不是原始文件的路径,因为使用Laravel框架在第一次使用时不正确的地方。
当然,最好的选择是重写包含snapshots
的任何请求
在配置Laravel应用程序之前,在nginx \ apache配置中查询参数到其对应的路径,这样这些请求就不会到达Laravel路由器。
我使用PhantomJS& amp;和我合着了Angular SEO plug-and-play solution。 Mongoose集成Web服务器,用于预呈现任何Async JS代码,并将其作为原始HTML进行服务。
服务器配置方面也在_escaped_fragment_
文件中进行了解释,请注意,如果您想使用静态快照,只需将proxy-pass更改为重写(以便正确的URL被索引编入索引)机器人程序)。
希望有所帮助。
使用nginx简单重写的示例:
README.md
编辑:
Apache,根据您的要求(一些建议:转移到nginx)。
if ($args ~* "^_escaped_fragment_=(.+)") {
set $path $1
set $args '';
rewrite ^.*$ /snapshots/$path last;
}