laravel 4路由?_escaped_fragment_ =

时间:2014-03-28 09:23:31

标签: php angularjs laravel-4

我正在尝试在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_=/*的路由并将其重定向到某个控制器,但这不起作用。

任何人都可以帮忙。

1 个答案:

答案 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;

 }