私はこの男と同じ問題を抱えています:
angularjs-slash-after-hashbang-gets-encoded
URL がエンコードされ、正しくルーティングされていないため、ルート構成で別の方法で失敗しているように見えます。理由はまだわかりませんが、URL の書き換えは正常に機能しています。唯一の例外は、HTML5 モードで URL にハッシュバンを追加した場合です。ハッシュバンにフォールバックし、URL を html5 モードに書き換えることを期待していました。
ここで何が起こっているか知っている人はいますか?
更新: 以前に提供された情報について詳しく説明します。
サーバー側でApacheを使用しており、.htaccessに次の構成があります。
Options +FollowSymLinks
IndexIgnore */*
DirectoryIndex index.html index.htm
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
</IfModule>
# html5 pushstate (history) support:
<ifModule mod_rewrite.c>
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
</ifModule>
私の $locationProvider とルート構成:
App.config(function($routeProvider, $sceDelegateProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$locationProvider.hashPrefix('!');
$routeProvider.when('/route1/:param', {
templateUrl: '/html/route1.html',
controller: 'Route1Ctrl'
});
$routeProvider.when('/', {
templateUrl: '/html/route1.html',
controller: 'Route1Ctrl'
});
$routeProvider.when('/route2', {
templateUrl: '/html/route2.html',
controller: 'Route2Ctrl'
});
$routeProvider.when('/route3', {
templateUrl: '/html/route3.html',
controller: 'Route3Ctrl'
});
$routeProvider.when('/route4', {
templateUrl: '/html/route4.html',
controller: 'Route4Ctrl'
});
$routeProvider.when('/route5', {
templateUrl: '/html/route5.html',
controller: 'Route5Ctrl'
});
$routeProvider.when('/route6', {
redirectTo: '/route4'
});
$routeProvider.otherwise({
redirectTo: "/"
});
});