Javascript 无法从url中删除#
当我有这样的代码时:Javascript 无法从url中删除#,javascript,angularjs,Javascript,Angularjs,当我有这样的代码时: phonecatApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', {templateUrl: 'partials/phone-list.html',controller: 'PhoneListCtrl' }). when('/phones/:phoneId', {templateUrl: 'parti
phonecatApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html',controller: 'PhoneListCtrl'
}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html',controller: 'PhoneDetailCtrl'
}).
otherwise({redirectTo: '/phones'
});
}]);
我可以通过转到url:http://localhost:8000/app/#/phones
但是,用于从url中删除#。如果我用以下代码替换上述代码:
phonecatApp.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider.
when('/phones', {templateUrl: 'partials/phone-list.html', controller: 'PhoneListCtrl'}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: 'PhoneDetailCtrl'}).
otherwise({redirectTo: '/phones'});
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
}]);
然后我转到url:http://localhost:8000/app/phones/
我看到的是/app/phones/的索引,而不是我的普通网页。
你知道我哪里出错了吗?如果你查看应用程序的包.json
,你会看到“开始”:“http服务器-a 0.0.0.0-p 8000”
。这将启动一个基本节点模块
http服务器是一个简单的零配置命令行http服务器
它没有提供太多的选择。但是,您可以使用-P
(注意大小写)创建代理
-p或--proxy将无法在本地解析的所有请求代理到给定的url。e、 g.:-P
因此,将开始行更改为“开始”:“http服务器-a 0.0.0.0-p 8000-phttp://localhost:8000/app/“
至少可以用于测试
当您向http://localhost:8000/app/phones
,服务器将代理它到您的/app/
目录,因为它无法解析。一旦应用程序加载,客户端路由器将启动,并使用HTML5重写将您重定向到请求的页面
在angular phonecat应用程序中,它的设计没有考虑HTML5模式,并且它包含一个与示例中创建的虚拟路由冲突的物理目录。无论您将应用程序部署到哪个服务器,HTML5Mode都希望没有与您的虚拟路由匹配的物理目录,因为在Angular应用程序可以干预之前,这些路由由服务器解析。好的。所以我用错误的方法解决了这个问题。 在遵循这些规则时,他们使用的是apache服务器,而不是apache服务器。 所以,为了启用html5配置,在本例中,必须配置这个npm http服务器-我找不到任何地方有文档记录可以这样做 所以,我从npm http服务器转移到apache服务器,并遵循以下步骤:
同样,底线是:在使用http服务器的基本模块时,不要浪费时间启用html5模式,这在官方教程中给出 需要将服务器设置为重新路由到应用程序入口点,因为您现在在URL中有虚拟目录Thank charlietfl,但您能解释一下如何做到这一点吗?根据服务器类型,使用
htaccess
例如在apache中或在IISI中的web.config,我将通过npm start启动服务器,遵循本教程:Thank Claies,你能告诉我让HTML5模式工作的步骤吗?我做了以下更改:“开始”:“http服务器-a 0.0.0.0-p 8000-p-I false”,仍在显示索引页。我刚刚再次查看,该项目有一个映射到/app/phones
的物理目录,这将阻止HTML5模式正常工作。您可能需要更改目录名,或者更改您正在使用的虚拟URL。对,因此我将目录电话更改为phones_json,现在我在浏览器中发现“找不到”继续。更改启动选项后是否重新启动服务器?您确实需要完整的url,包括http://
,代理选项才能工作;我肯定你把它包括进去了,但可能是从评论中删除了。嗯,在没有自动索引
选项的情况下尝试一下。我很高兴你能做到这一点,这基本上是我从一开始就想说的,但我想至少努力尝试一下。我在回答中确实说过,基本服务器没有很多配置选项。