【问题标题】:angularJS how to user accessible url routing?angularJS如何用户可访问的url路由?
【发布时间】:2013-04-28 14:28:58
【问题描述】:

基本路由方法如下,

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers']).
 config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
  $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MyCtrl1'});
  $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'});
  $routeProvider.otherwise({redirectTo: '/view1'});
  $locationProvider.html5Mode(true);
}]);

我想让用户可以通过在浏览器上输入 url "://host/view1" 来访问 view1。但这行不通..

通过使用 $routeProvider 和 $locationProvider,如果用户点击“href=/view1”这个链接,那么 页面路由主机/视图1。

但是如果用户直接访问 url "://host/view1" 它会发出 404 错误。 为了让用户可以通过url直接访问/view1,我必须删除html5Mode,用户可以通过“//host/#/view1”访问

但是我怎样才能删除#符号!?不仅是 html5mode,方法用户可以通过输入该 url 直接访问页面。

【问题讨论】:

  • 在 apache 上使用 mod_rewrite 将所有对不存在文件的请求路由到您的 index.html。 Angular 会从那里拿走它。

标签: angularjs


【解决方案1】:

谢谢。耀西

我在 DocumentRoot 文件夹中创建 .htaccess 文件并在下面添加

RewriteEngine   On
RewriteBase     /
RewriteCond     %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_FILENAME} !-d
RewriteRule     .               /index.html              [L]

进入 .htaccess 文件。

效果如我所料!

ps.

RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_FILENAME} !-d

以上两行表示如果浏览器中指定名称的文件不存在,或者浏览器中的目录不存在则执行下面的重写规则

【讨论】:

  • 效果一样,是的。但是您需要小心,404 会破坏您的 SEO 评级。最好使用mod_rewrite
  • 使用 .htaccess 不是 mod_rewrite?我不知道.. 你能推荐 mod_rewrite 的教程网址吗?
  • 是的,使用 .htaccess 并不一定意味着使用 mod_rewrite。您可以在 .htaccess 文件中定义很多东西,其中只有一个可能是 mod_rewrite。您在回答中提到的 ErrorDocument 指令是另一个。目前我不能推荐一个教程,但它真的没有那么复杂,所以一个快速的谷歌搜索应该很快就会产生结果。
  • 我们如何使用 MVC .NET 应用程序来做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多