2014-03-28 163 views
0

我想在我的Laravel 4應用程序中使用Angular JS的乾淨網址。當我嘗試所需的東西通常沒有laravel 4指向這個網址。laravel 4路線?_escaped_fragment_ =

http://www.yearofmoo.com/2012/11/angularjs-and-seo.html,我能夠得到的東西工作。即使?_escaped_fragment_=已更改爲快照/ *文件夾並挑選了內容。

但我不能在Laravel 4中做同樣的事情。我不知道如何做到這一點。

我想定義一個像?_escaped_fragment_=/*這樣的路線,並將其重定向到某個控制器,但這不起作用。

任何人都可以請幫忙。

回答

0

轉義片段是查詢參數,而不是路由,在根路由Route::get('/', 'RootCtrl');中,您可以檢查$_GET['_escaped_fragment']的存在,如果存在,則返回HTTP 302重定向到快照目錄中的相應文件。

雖然這會起作用,但它不是一個完美的解決方案,因爲有些機器人可能會索引snapshots文件的路徑而不是原來的文件,因爲使用Laravel框架來做這件事首先是不正確的。

課程的最佳選擇,是重寫包含一個_escaped_fragment_ 查詢參數給它的Laravel應用程序的配置之前的相應的路徑,在nginx的\ apache的配置,任何要求,這樣的請求將不會事件到達Laravel路由器。

我與人合着了Angular SEO plug-and-play solution,使用PhantomJS & Mongoose集成web服務器,預渲染任何Async JS代碼,並將其作爲原始HTML服務器。

服務器配置方面也在README.md文件中解釋過,請注意,如果您想要使用靜態快照,只需將proxy-pass更改爲重寫(以便正確的URL獲得機器人索引)。

希望有所幫助。使用簡單的重寫與nginx的

實施例:

if ($args ~* "^_escaped_fragment_=(.+)") { 
     set $path $1 
     set $args ''; 
     rewrite ^.*$ /snapshots/$path last; 

} 

編輯:

的Apache,您的請求(一些忠告:移動到nginx的)。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{QUERY_STRING} ^_escaped_fragment=(.+)$ 
    RewriteRule ^.*$ /snapshots/%1 [QSA,L] 
</IfModule> 
+0

我它使用Apache ......所以,如果ü可以把這些代碼做... –

+0

我嘗試了...但我不使用PhantomJS,因此......我不敢肯定我怎麼能符合我目前的要求。 :( –

+0

發佈,請嘗試使用nginx ... –