AngularJS- und Laravel 4-Routingkonflikt im HTML5-Modus

Ich möchte den # -Hash mit Angularjs von URLs entfernen.$locationProvider.html5Mode(true).

Beispiel: Die Adressleiste wird angezeigthttp://localhost/shop Anstatt vonhttp://localhost/#/shop.

Alles funktioniert gut, bis ich eine Seite aktualisiere. Wenn ich aktualisiere, wird die folgende Laravel Route (in routes.php definiert) aufgerufen

Route::resource('shop', 'ShoppingController')

nicht die AngularJS Route (definiert in app.js)

$routeProvider.when('/shop', { 
    templateUrl: 'templates/shop.html', 
    controller: 'ShoppingController' 
});

Mein Code:

routes.php (Laravel Routes)

Route::get('/', function() {
    return View::make('index'); 
});
Route::resource('shop', 'ShoppingController'); 

app.js (AngularJS-Routen)

var app = angular.module('shoppingApp',['ngRoute','SharedServices']); 

app.config(function($routeProvider, $locationProvider) { 
    $routeProvider.when('/shop', {
        templateUrl: 'templates/shop.html', 
        controller: 'ShoppingController'
    });
    $routeProvider.otherwise({ redirectTo: '/' }); 
    $locationProvider.html5Mode(true); 
});

Meine Verzeichnisstruktur:

Project
    /app 
        /...
        /views
            -index.php (single page application file)
            -routes.php (Laravel routes)
    /public
        /...
        /js
            -angular.js
            -app.js
        -index.php (Laravel index file)

Versuchte Lösungen:

Schreiben Sie die htaccess-Datei neu, sodass alle Anforderungen an index.php umgeleitet werden (die einseitige Anwendungsdatei, von der aus AngularJS das Routing übernehmen würde). Problem: Auf diese Weise wird die Laravel-Route (Route :: resource ('shop', 'ShoppingController'); - für die Interaktion mit der Datenbank erforderlich) für den AngularJS $ http-Dienst unzugänglich:

app.js

app.controller("ShoppingController", function($scope, $http) {
    $http.get('/shop', { cache: true}).
        success(function(data, status) {
        $scope.items = data
    }).
    error(function(data, status) {
        console.log('Status: ' + status);
        });
});

Frage: Wie kann ich das Routing-Problem lösen, sodass auf die AngularJS-Route und nicht auf die Laravel-Route zugegriffen wird, wenn ich localhost / shop aktualisiere?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage