2016-08-05 10 views
1

私はhtml5modeを使用しようとしています。私はこのように使用しています:私は「/」「頭」タグ内のHREFセットで「ベース」タグを使用していangularjs - html5modeは正常に動作しません。

そして、私のメインを(HTML ...でこれを書くことはできません)モジュールは、怒鳴るのようルートを扱っている:

angular.module('MyChef', [ 
    'Authentication', 
    'Home', 
    'UserArea', 
    'ngRoute', 
    'ngCookies' 
]) 

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

    $routeProvider 
     .when('/login', { 
      controller: 'LoginController', 
      templateUrl: 'modules/authentication/views/login.html' 
     }) 

     .when('/', { 
      controller: 'HomeController', 
      templateUrl: 'modules/home/views/home.html' 
     }) 

     .when('/home', { 
      controller: 'HomeController', 
      templateUrl: 'modules/home/views/home.html' 
     }) 


     .when('/user-area', { 
      controller: 'UserAreaController', 
      templateUrl: 'modules/user-area/views/user-area.html' 
     }) 


     .otherwise({ redirectTo: '/' }); 

     $locationProvider.html5Mode({ 
        enabled: true, 
        requireBase: false, 
     }); 
}]).run(//doesn't matter I guess...); 

あなたは私が使用しようとしている見ることができるように私のパスにハッシュを無視した「偽」として設定「requireBase」が、機能していません。

私のnginxの設定ファイル:

server { 
    listen 80 default_server; 
    listen [::]:80 default_server; 

    root /var/www/site/public; 

    server_name mychefake.com.br; 


    location/{ 
     index index.html; 
     try_files $uri $uri/ =404; 
    } 


    location /api { 
    proxy_set_header Host $http_host; 
    proxy_set_header X-Forwarded-Host $http_host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
# proxy_set_header X-Forwarded-Port 443; #this is important for Catalyst Apps! 
     rewrite /api(.*) /$1 break; 
    proxy_pass http://localhost:5000; #changed from http://localhost:5000/ 
    } 


} 

行動:

私がアクセスした場合のようなもの:私はログインしていないよ場合、私は( '/ログイン' にリダイレクトされていますhttp://localhost

-に)。それで大丈夫です!

しかし、「#」を付けずにこのページをリロードしようとすると、私の顔に404ページあります。どうして?

私は何かをnginx設定ファイル(おそらく書き直し)で行う必要があると思います。 AngularJSでこれを直接行うことはできますか?

ありがとうございます!

答えて

0

これは、サーバーに要求を送信するときに、要求しているファイルが存在せず、ルーティングがフロントエンド内で行われていることを知らないためです。 .htaccessを変更して、すべてのリクエストが1つのファイルにルーティングされるようにする必要があります。

nginxの設定ファイルの場所セッション上
RewriteEngine On 
Options FollowSymLinks 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /#/$1 [L] 
+0

ファイルが存在します(index.html?!?)が存在します。しかし、あなたが話していることを正確に理解できない可能性があります(申し訳ありません)。とにかく、私はどのようにnginx(RewriteRuleの例外)でこのapacheコマンドを再現するか分からない。リサーチ中... –

0

この作品
rewrite ^/login /#login redirect; 
rewrite ^/user-area /#user-area redirect; 

!しかし、最善の方法ではありません(実際には愚かな方法です)。私はより良い解決策が必要です。私は条件付きで書き直してみましたが、nginxは '私を叫んでいる':D。誰か?

関連する問題