私はこれを数日間断続的に理解しようとしてきましたが、インターネットで読んだことはすべて、うまくいくはずだと言っています. アプリのルーティングは、アプリを使用している限り問題なく機能しますが、URL をコピーして貼り付けようとすると、状態が失われ、ホームにリダイレクトされます。
* 編集 app.yaml が「何があっても index.html を処理する」ためだと思い始めています。app.yaml が何をしても情報が取り除かれるように見えます。そのため、$state の URL は「」です。 編集 *
URLに関係なくindex.htmlを返すようにサーバーを構成しているため、ブラウザーバーに貼り付けたURLを使用してルーティングロジックに到達しています。$state と $stateParams を挿入する実行ブロックにブレークポイントを配置すると、現在の URL が "" であることが示され、ルートで構成ブロックに到達すると、.otherwise('/') に移動してリダイレクトされますアプリの開始まで。
app.run([
'$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams){
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
console.log($rootScope);
}])
.config([
'$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider){
$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home', {
url: '/',
templateUrl: 'app/layout/home.html',
controller: function($stateParams){
debugger;
}
})
.state('other', {
url: '/{abc:[a|b|c|d]}',
templateUrl: 'app/layout/other.html'
});
}]);
ここに私のapp.yamlがあります
application: app
version: 1
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css|html))
static_files: \1
upload: (.*\.(gif|png|jpg|ico|js|css|html))
- url: /robots.txt
static_files: robots.txt
upload: robots.txt
- url: .*
static_files: index.html
upload: index.html //I am relying on this as a fallback for any 404's, it seems to work
skip_files:
- ^(.*/)?#.*#$
- ^(.*/)?.*~$
- ^(.*/)?.*\.py[co]$
- ^(.*/)?.*/RCS/.*$
- ^(.*/)?\..*$
- node_modules/*
- grunt/*
- Gruntfile.js
- less/*
- lib/*
これが私のmain.pyです。これは、Googleが提供するデフォルトです
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template
class MainHandler(webapp.RequestHandler):
def get (self, q):
if q is None:
q = 'index.html'
path = os.path.join (os.path.dirname (__file__), q)
self.response.headers ['Content-Type'] = 'text/html'
self.response.out.write (template.render (path, {}))
def main ():
application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)
util.run_wsgi_app (application)
if __name__ == '__main__':
main ()
したがって、localhost:8000 にアクセスすると、問題なくホームページにアクセスできます。リンクをクリックして他のページに移動すると、localhost:8000/a または /b などに移動します。そのリンクをコピーして別のタブに貼り付けると、localhost:8000 に移動します。実行ブロックと構成ブロックにブレークポイントを設定しましたが、そこに到達するまでに URL が変更されていないため、サーバーの問題ではないことは 90% 確信していますが、それが何であるかはわかりません。/a に移動する前に問題が発生し、/a を取得できないというエラーが返されました。そのため、サーブアップインデックスが常に変化することでそれを修正しました。そのため、サーバーを正しくセットアップしたと確信しています。
私のすべての調査からわかる限り、これは角度側でこれ以外の構成なしで機能するはずです。また、アプリ内を問題なくナビゲートできると言ったように、状態が正しく設定されているようです。
同様の問題で見つけたSOの質問だけは、何かが欠けていない限り適用されないようです。1 つは、私が修正したサーブアップ インデックスの問題に関するもので、もう 1 つは、私がそうではないと思う「/」が欠落していたものです。