2016-02-11 8 views
10

Ho esaminato la documentazione per il routing CMS di ottobre (https://octobercms.com/docs/plugin/registration#routing-initialization), ma penso che manchi qualcosa. Ho una pagina chiamata 'offerte' che rende alcune informazioni di base insieme a un componente plugin (chiamato 'offerte'). La pagina di solito appare alla url:Ottobre CMS - Come instradare correttamente

http://www.example.com/deals 

Tuttavia, voglio creare un percorso in modo che, se un utente visita l'url:

http://www.example.com/deals2 

si metterà automaticamente in rotta di nuovo a

http://www.example.com/deals 

So che dovrei creare un file routes.php nella mia directory dei plugin. Tuttavia, quando provo a utilizzare

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

Si lamenta che non è possibile trovare la vista 'offerte'. Che cosa sto facendo di sbagliato?

Inoltre, come posso percorso in modo che la mia home page

http://www.example.com 

farebbe rotta verso

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

se aiuta, ho usato una soluzione 'sporca' per la casa reindirizzamento della pagina su un sito che ho creato. Aggiungi questo al tuo file .htaccess: 'RewriteRule^/? $ Http://www.example.com/deals [R = 301, NC, L]' potresti fare lo stesso con gli altri url che vuoi reindirizzare, ma ancora una volta, questo è solo un rimedio che ho usato perché non so come farlo correttamente .... quindi non è davvero una risposta. – merodeador

+0

È un bel trucco, ma spero che ci sia un metodo integrato per questo. Grazie per il commento. – user2694306

+0

Stai provando a reindirizzare '/ deals2' in modo specifico, o qualsiasi percorso come'/deals [some-number] '? – BrokenBinary

risposta

9

In OctoberCMS, e laravel che si basa su, per reindirizzare un percorso ad un altro si può fare questo:

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

Il primo percorso utilizza un parametro percorso con un regex constraint e reindirizzerà qualsiasi richiesta che inizia con /deals e termina con un numero sulla route /deals. Ciò significa che instraderà /deals1, /deals2, /deals3, ecc. A /deals.

Il secondo percorso reindirizzerà la tua home page a /deals.

Ovviamente, il reindirizzamento comporta un costo aggiuntivo. Se non vuoi farlo, puoi eseguire il reindirizzamento in Apache o Nginx.

Come per il commento, se si desidera reindirizzare /deals[any-number]/[anything] a /deals/[that-same-anything], aggiungere un optional route parameter al primo percorso. Che sarebbe simile a questa:

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

Naturalmente, se questo /deals/[anything] percorso non esiste, allora si otterrà una 404.

+0

Questo ha funzionato alla grande, grazie. Una domanda: come regoleresti il ​​primo reindirizzamento in modo che funzionasse con segmenti di URL aggiuntivi (ad esempio/deals2/ca-toronto andrebbe a/deals/ca-toronto)? – user2694306

1

Prova Route::get('/deals2', function(){return Redirect::to('/deals')}); che reindirizzare il browser a costo di una richiesta supplementare.