1

Ich habe eine Angular-App mit ngRoute-Modul zusammen mit HTML5-Modus pushState für sauberere URL.Angular Route mit mehreren Schrägstrichen Ordnerpfad überschreiben

app.config(function($routeProvider, $locationProvider){ 
$locationProvider.html5Mode(true); 

$routeProvider 
    //Route for home page 
    .when("/", { 
     templateUrl: "templates/main.html", 
     controller: "imageController", 
    }) 
    //Route for about page 
    .when("/me", { 
     templateUrl: "templates/me.html", 
     controller: "imageController", 
    }) 
    //404 error 
    .when("/404", { 
     template: "", 
     controller: "imageController", 
     title: "404 Error", 
    }) 
    //Default route to/
    .otherwise({ 
     redirectTo: "/404", 
    }); 
}); 

Ich habe meine .htaccess-Datei geändert, um nachfolgende Schrägstriche ("/") neu zu schreiben.

RewriteEngine on 
RewriteBase/

# Don't rewrite files or directories 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 

RewriteRule^- [L] 

# Redirect urls without a trailing slash 
RewriteRule ^(.*)/$ $1 [L,R=301] 

# Rewrite everything else to index.html to allow html5 state links 
RewriteRule^index.html [L] 

Dies funktioniert gut für einen abschließenden Schrägstrich, z. 'http://example.com/me/' aktualisiert 'http://example.com/me' und wird entsprechend weitergeleitet.

Das Routing bricht jedoch, wenn mehrere Schrägstriche für z. 'http://example.com/me/foo' führt zu einer unvollständigen Seite anstatt zu '/ 404' umzuleiten. Wie behebe ich das Problem, wenn '/ me/foo' route nicht existiert, wird es nach '/ 404' umgeleitet.

Antwort

0

dachte ich die Lösung für mein Problem heraus. Ich verwendete mehrere .htaccess Dateien in den spezifischen Ordnern, die Apache benötigen, um die Rewrite-Regel anzuwenden.

Für z.B. Um alles an http://example.com/me/ zu leiten, erstelle ich eine separate .htaccess Datei im Ordner /me und ändern Sie die RewriteBase zu /me/.

0

Ihr Problem ist, dass $ route nicht für etwas nach/mich sucht, so ist es es als 404.

Tun Sie dies auf der Route der Behandlung, wenn Sie Parameter es folgen wollen.

.when("/me/:params?", { // The ? allows for the parameter to be empty so /me and /me/foo will both return the correct route 
    templateUrl: "templates/me.html", 
    controller: "imageController", 
}) 

Wenn Sie diese routeParams nach der Route, die Sie tun müssen, aufgerufen wurde alles abrufen möchten ist $routeParams in Ihrem Controller verwenden oder wie so Richtlinie.

scope.myParam = $routeParam.params; //In the instince of the URL above your scope.myParams would set to foo 
+0

Wenn ich dies tue, wird meine "/ mich" Route nicht funktionieren. Meine Frage ist nicht spezifisch für "/ me", sondern allgemein für mehrere Schrägstriche. Für z.B. Ich möchte, dass "http://example.com/blah/blah" zu "/ 404" weitergeleitet wird. Irgendeine Idee? – stones4yap

+0

Ja, die $ routeParams sollte für alle Routen mit mehreren Schrägstrichen funktionieren. Ich habe auch meine Antwort bearbeitet, um zu zeigen, wie man es ohne Params machen kann./ich und/me/foo sollten beide auf diese Weise arbeiten. – Ohjay44

+0

Ich habe Ihren Vorschlag versucht, aber es funktioniert immer noch nicht. Liegt es vielleicht daran, dass ich HTML5 PushState aktiviert habe? Vielleicht muss ich meine .htaccess Neuschreiben anpassen? Alle anderen Ideen würden sehr geschätzt werden. Vielen Dank. – stones4yap

Verwandte Themen