2016-02-11 10 views
10

Ich habe die Dokumentation für Oktober CMS-Routing (https://octobercms.com/docs/plugin/registration#routing-initialization) überprüft, aber ich denke, dass ich etwas vermisse. Ich habe eine Seite namens "Deals", die einige grundlegende Informationen zusammen mit einem Plugin (genannt "Deals") -Komponente rendert. Die Seite erscheint normalerweise in der url:Oktober CMS - Wie man richtig routet

http://www.example.com/deals 

Allerdings möchte ich einen Weg zu schaffen, so dass, wenn jemand die URL besucht:

http://www.example.com/deals2 

es wird automatisch Route sie

http://www.example.com/deals 
zu

zurück

Ich weiß, dass ich eine routes.php-Datei in meinem Plugin-Verzeichnis erstellen sollte. Jedoch, wenn ich versuche,

Es beschwert sich, dass es nicht finden kann, die "Deals" -Ansicht. Was mache ich falsch?

Außerdem, wie kann ich Route es so, dass meine Homepage

http://www.example.com 

würde Route zu

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

, wenn es hilft, ich verwendet, um eine ‚schmutzige‘ Abhilfe für das Haus Seitenumleitung auf einer Seite, die ich gemacht habe. Fügen Sie dies Ihrer .htaccess-Datei hinzu: 'RewriteRule^/? $ Http://www.example.com/deals [R = 301, NC, L]' Sie könnten dasselbe mit den anderen URLs tun, die Sie umleiten möchten, aber wieder, das ist nur ein Workaround, den ich verwendet habe, weil ich nicht weiß, wie man es richtig macht .... so nicht wirklich eine Antwort. – merodeador

+0

Es ist ein netter Hack, aber ich würde hoffen, dass es eine eingebaute Methode dafür geben würde. Danke für den Kommentar. – user2694306

+0

Versuchen Sie, '/ deals2' gezielt umzuleiten, oder eine Route wie'/deals [einige-nummer] '? – BrokenBinary

Antwort

9

In OctoberCMS und Laravel, die es auf der Basis ist eine Route zu einem anderen umleiten Sie dies tun können:

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

Die erste Route jede Anforderung einer Route verwendet Parameter mit einem regex constraint und umleiten, die beginnt mit /deals und endet mit einer Nummer zu Ihrer /deals Route. Das heißt, es wird /deals1, /deals2, /deals3 usw. zu /deals routen.

Die zweite Route wird Ihre Homepage auf /deals umleiten.

Natürlich kostet Umleiten eine zusätzliche Anfrage. Wenn Sie das nicht möchten, können Sie die Umleitung in Apache oder Nginx durchführen.

Laut Ihrem Kommentar, wenn Sie /deals[any-number]/[anything] zu /deals/[that-same-anything] umleiten wollten, dann würden Sie eine der ersten Route hinzufügen. Das würde wie folgt aussehen:

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

Natürlich, wenn die /deals/[anything] Route nicht existiert, dann werden Sie eine bekommen 404.

+0

Das hat super funktioniert, danke. Eine Frage, wie würden Sie die erste Weiterleitung so anpassen, dass sie mit zusätzlichen URL-Segmenten funktioniert (z. B./deals2/ca-toronto würde nach/deals/ca-toronto gehen)? – user2694306

1

Versuchen Route::get('/deals2', function(){return Redirect::to('/deals')});, die den Browser auf Kosten einer zusätzlichen Anforderung umleitet.