2016-02-11 17 views
10

Tôi đã xem lại tài liệu dành cho định tuyến CMS tháng 10 (https://octobercms.com/docs/plugin/registration#routing-initialization), nhưng tôi nghĩ rằng tôi thiếu một thứ gì đó. Tôi có một trang gọi là 'giao dịch' để hiển thị một số thông tin cơ bản cùng với một plugin (được gọi là thành phần 'giao dịch'). Các trang thường xuất hiện ở url:CMS tháng 10 - Cách định tuyến chính xác

http://www.example.com/deals 

Tuy nhiên, tôi muốn tạo ra một con đường để nếu ai đó truy cập url:

http://www.example.com/deals2 

nó sẽ tự động định tuyến lại cho

http://www.example.com/deals 

Tôi biết rằng tôi nên tạo tệp routes.php trong thư mục plugin của mình. Tuy nhiên, khi tôi thử sử dụng

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

Nó phàn nàn rằng nó không thể tìm thấy giao diện 'giao dịch'. Tôi đang làm gì sai?

Bên cạnh đó, làm thế nào tôi có thể đường nó để trang chủ của tôi

http://www.example.com 

sẽ lộ trình để

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

nếu nó giúp, tôi sử dụng một cách giải quyết 'bẩn' cho gia đình chuyển hướng trang trên trang web tôi đã tạo. Thêm tệp này vào tệp .htaccess của bạn: 'RewriteRule^/? $ Http://www.example.com/deals [R = 301, NC, L]' bạn có thể làm tương tự với url khác mà bạn muốn chuyển hướng, nhưng một lần nữa, đây chỉ là một workaround tôi được sử dụng bởi vì tôi không biết làm thế nào để làm điều đó đúng .... vì vậy không thực sự là một câu trả lời. – merodeador

+0

Đó là một hack tốt đẹp, nhưng tôi hy vọng sẽ có một phương pháp được xây dựng cho nó. Cảm ơn bạn đã bình luận. – user2694306

+0

Bạn đang cố chuyển hướng '/ giao dịch2' cụ thể hay bất kỳ tuyến đường nào như'/giao dịch [một số-số] '? – BrokenBinary

Trả lời

9

Trong OctoberCMS, và Laravel mà nó dựa trên, để chuyển hướng một con đường khác bạn có thể làm điều này:

// 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'); 
} 

Tuyến đầu tiên sử dụng một tham số tuyến đường với một regex constraint và sẽ chuyển hướng bất kỳ yêu cầu đó bắt đầu với /deals và kết thúc bằng một số tới tuyến đường /deals của bạn. Điều đó có nghĩa là nó sẽ định tuyến /deals1, /deals2, /deals3, v.v. /deals.

Tuyến đường thứ hai sẽ chuyển hướng trang chủ của bạn đến /deals.

Tất nhiên, chuyển hướng sẽ mất thêm một yêu cầu. Nếu bạn không muốn làm điều đó, thì bạn có thể thực hiện chuyển hướng trong Apache hoặc Nginx.

Theo nhận xét của bạn, nếu bạn muốn chuyển hướng /deals[any-number]/[anything] đến /deals/[that-same-anything] thì bạn sẽ thêm optional route parameter vào tuyến đường đầu tiên. Điều đó sẽ trông như thế này:

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

Tất nhiên, nếu điều đó /deals/[anything] tuyến đường không tồn tại, sau đó bạn sẽ nhận được một 404.

+0

Điều này làm việc tuyệt vời, cảm ơn. Một câu hỏi, bạn sẽ điều chỉnh chuyển hướng đầu tiên sao cho nó sẽ hoạt động với các phân đoạn url bổ sung (ví dụ:/deals2/ca-toronto sẽ chuyển đến/deals/ca-toronto)? – user2694306

1

Hãy thử Route::get('/deals2', function(){return Redirect::to('/deals')}); mà sẽ chuyển hướng trình duyệt với chi phí của một yêu cầu thêm.

Các vấn đề liên quan