“base href”使用ui-router在路由URL中添加目录路径

时间:2016-09-23 19:37:59

标签: angularjs .htaccess angular-ui-router ui-sref base-tag

摘要:

使用<base href="/prod/public/" />时,会在路由网址中添加目录路径 e.x. http://www.example.com/prod/public/home

我的角度应用程序托管在prod/public目录中。

public/index.html

<base href="/prod/public/" />

我的路线如下:

$stateProvider
     .state('home', {
      url: '/home',
      templateUrl: function($stateParams) {
          var path = 'app/users/views/home.html';
          return path;
      },
      controller: 'HomeCtrl'
})

目录结构:

public_html
      -.htaccess
      - other folders
      - prod
           - public
                - app
                - index.html
           - bower.json
           - .htaccess
           - package.json
           - gulpfile.js
           - Readme.md
.htaccess 目录中的

prod

RewriteEngine On
Options -Indexes
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ public/index.html [L]

以下是我在模板中引用状态的方法:

<a ui-sref='home'>Go to home</a>

点击此链接后,会重定向到此网址:http://www.example.com/prod/public/home

要求:

网址应为 http://www.example.com/home ,而不是 http://www.example.com/prod/public/home

1 个答案:

答案 0 :(得分:1)

角度路由中的<base href="/prod/public/"/>不是设置文档根目录/掩码网址,而是在HTML5模式下使用定义的URL预先添加URL。

定义路线时,例如/home angular会将网址正确设置为/prod/public/home。如果您希望您的网址没有该文件夹结构,那么您将需要将文件放在根目录中(特别是在共享主机的情况下)或更改Nginix / Apache Document根设置以指向正确的路径。然后,您可以设置将您的网址读取为/ home等