1

Angularjs と Symfony 2 で開発されたアプリケーションがあり、html5 モードを有効にしてフレンドリーな URL を取得しました。

アプリケーションは、サービスで応答するために Symfony 2.3 と統合されています。

app.js

 .config(['$routeProvider', '$locationProvider','$provide' , function($routeProvider, $locationProvider,$provide) {

      $provide.decorator('$sniffer', function($delegate) {
            $delegate.history = false;
            return $delegate;
        });

    $routeProvider.when('/home', {templateUrl: 'views/home.html', controller: 'HomeController'});
    $routeProvider.when('/quienes_somos', {templateUrl: 'views/quienes_somos.html', controller: 'QuienesSomosController'});
    $routeProvider.when('/ubicanos', {templateUrl: 'views/ubicanos.html', controller: 'UbicanosController'});
    $routeProvider.when('/ubicanos/:route', {templateUrl: 'views/ubicanos.html', controller: 'UbicanosController'});
    $routeProvider.when('/catalogo', {templateUrl: 'views/catalogo.html', controller: 'CatalogoController' });
    $routeProvider.when('/catalogo/:category', {templateUrl: 'views/catalogo.html', controller: 'CatalogoController' });
    $routeProvider.when('/catalogo/:category/:productid', {templateUrl: 'views/catalogo.html', controller: 'CatalogoController'});
    $routeProvider.when('/catalogo/results',{templateUrl: 'views/catalogo.html', controller: 'CatalogoController'});
    $routeProvider.when('/noticias', {templateUrl: 'views/noticias.html', controller: 'NoticiasController'});

    $routeProvider.otherwise({redirectTo: '/home'});

        $locationProvider.html5Mode(true);
  }]);

カテゴリのルートとパラメーターを直接入力してアクセスしようとすると、問題が発生します。

http://plastimex.localhost/catalogo/tablilla-plastica

Angularjs が読み込まれません。しかし、他のルートは正しく機能します。

稼働していないルート

 $routeProvider.when('/catalogo/:category', {templateUrl: 'views/catalogo.html', controller: 'CatalogoController' });

 $routeProvider.when('/catalogo/:category/:productid', {templateUrl: 'views/catalogo.html', controller: 'CatalogoController'});

また、これをindex.htmlに設定しました<base href="/index.html" />

これは .htaccess です

DirectoryIndex app.php

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    # Rewrite all other queries to the front controller.
    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

動作するように htaccess に変更を加えましたが、うまくいきませんでした。ロールバックしました。

何か案が?お願いします。ありがとうございました。

4

1 に答える 1

1

html5mode を true に設定していますが、言及した URL の例は、ハッシュバンを使用しているように見えます。これは単なるタイプミスですか?

http://plastimex.localhost/index.html#/catalogo/tablilla-plastica

する必要があります

http://plastimex.localhost/catalogo/tablilla-plastica

申し訳ありませんが、これをコメントとして残しておきますが、ポイントがありません。

関連ドキュメントへのリンク: http://docs.angularjs.org/guide/dev_guide.services.$location#hashbang-and-html5-modes

于 2013-11-05T17:21:03.753 に答える