2016-02-11 77 views
10

我一直在審查十月CMS路由文檔(https://octobercms.com/docs/plugin/registration#routing-initialization),但我認爲我錯過了一些東西。我有一個名爲'deals'的頁面,它提供了一些基本信息以及一個插件(稱爲'deals')組件。因此,如果有人訪問網址十月CMS - 如何正確路由

http://www.example.com/deals 

不過,我想創建一個路由:頁面通常出現在URL

http://www.example.com/deals2 

它會自動將他們帶回

http://www.example.com/deals 

我知道我應該在我的插件目錄中創建一個routes.php文件。但是,當我嘗試使用

Route::get('/deals2', function() 
{ 
     return View::make('deals'); 
}); 

它抱怨說它無法找到'交易'視圖。我究竟做錯了什麼?

此外,我怎麼能航線它使我的主頁

http://www.example.com 

將路線

http://www.example.com/deals 
+0

如果有幫助,我使用的「髒」的解決方法爲家頁面在我創建的網站上重定向。把這個添加到你的.htaccess文件中:'RewriteRule^/?$ http://www.example.com/deals [R = 301,NC,L]' 你可以對你想重定向的其他url做同樣的處理,但再一次,這只是我使用的一種解決方法,因爲我不知道該怎麼做才能正確執行....所以不是真正的答案。 – merodeador

+0

這是一個很好的黑客攻擊,但我希望有一個內置的方法。感謝您的評論。 – user2694306

+0

您是否正在嘗試重定向'/ deals2',或者像'/ deals [some-number]'這樣的任何路線? – BrokenBinary

回答

9

在OctoberCMS和Laravel它是基於,一個路由重定向到另一個,你可以這樣做:

// Redirect /deals2, /deals3, ... to /deals 
Route::get('{dealSlug}', function($dealSlug) { 
    return redirect('deals'); 
})->where('dealSlug', '^deals[0-9]+'); 

// Redirect homepage to /deals 
Route::get('/', function() { 
    return redirect('deals'); 
} 

第一路由使用的路由參數與regex constraint並重定向任何請求從/deals開始,並以您的/deals路線的號碼結尾。這意味着它會將/deals1/deals2,/deals3等路由到/deals

第二條路線將您的主頁重定向到/deals

當然,重定向會花費額外的請求。如果你不想這樣做,那麼你可以在Apache或Nginx中進行重定向。

根據您的意見,如果您想將/deals[any-number]/[anything]重定向到/deals/[that-same-anything]那麼您應該在第一條路線上添加optional route parameter。這將是這樣的:

// The new first route 
Route::get('{dealSlug}/{extra?}', function($dealSlug, $extra = '') { 
    return redirect('deals/' . $extra); 
})->where('dealSlug', '^deals[0-9]+'); 

當然,如果/deals/[anything]路由不存在,那麼你會得到一個404

+0

這很好,謝謝。一個問題,你將如何調整第一個重定向,以便它可以處理額外的url段(例如/ deals2/ca-toronto會去/ deal/ca-toronto)? – user2694306

1

嘗試 Route::get('/deals2', function(){return Redirect::to('/deals')});這將重定向需額外要求的成本瀏覽器。