没有哈希的角色直接网址

时间:2015-07-25 20:00:50

标签: asp.net-mvc angularjs

我有一个网站,我建立在mvc和c#.net工作正常,现在我正在尝试使用角度建立相同的移动网站,所以我希望网址没有哈希所以我使用以下代码我的js文件

var app = angular.module('mobilesite', ["ngRoute", "ngTouch", "mobile-angular-ui", "shoppinpal.mobile-menu"]);

app.config(['$httpProvider', function ($httpProvider) {
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
}]);

app.config(function ($routeProvider, $locationProvider) {
    $routeProvider
        .when('/Blog', {
        templateUrl: "/Blog/Index"
    });

    //$locationProvider.html5Mode(true);
});

app.controller('maincontroller', function ($scope) {
    $scope.Name = "Index Mobile";
});

app.controller('blogcontroller', function ($scope) {
    $scope.Name = "Blog Mobile";
});

例如,博客的网址将为http://localhost/Blog,并且点击链接时没有任何问题。

但是当我打开一个新的浏览器并直接输入上面的url时,我没有加载任何布局,只显示{{Name}}。当我改变javascript以使用哈希时,一切都运行良好。

我在这里遗漏了什么,请帮忙。

2 个答案:

答案 0 :(得分:2)

我认为您需要设置$locationProvider.setHtml5Mode(true)。请参阅https://docs.angularjs.org/api/ng/provider/ $ locationProvider和AngularJS routing without the hash '#'

修改

您还需要为服务器配置深层链接。请查看此页面:https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode

如果你正在使用Apache:

<VirtualHost *:80>
    ServerName my-app

    DocumentRoot /path/to/app

    <Directory /path/to/app>
        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]
    </Directory>
</VirtualHost>

答案 1 :(得分:0)

感谢您的回复,但实际上我使用的是mvc 4.0并且我修复了两种方式,首先我从常规站点有web.config url重写逻辑,因为这是移动我不想要不同的网址,所以即使我使我的html5mode变为true,它不起作用,所以我将routeprovider条件更改为小写并触发。

 <rewrite>
  <rules>
    <rule name="Add WWW prefix">
      <match url="(.*)" ignoreCase="true"></match>
      <conditions>
        <add input="{HTTP_HOST}" pattern="^xxxxx\.com"/>
      </conditions>
      <action type="Redirect" url="http://www.xxxxxx.com/{R:1}" redirectType="Permanent"/>
    </rule>
    <rule name="Lower Case URLs" stopProcessing="true">
      <match url="[A-Z]" ignoreCase="false" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{URL}" pattern="WebResource.axd" negate="true" />
      </conditions>
      <action type="Redirect" url="{ToLower:{URL}}" />
    </rule>
  </rules>
</rewrite>

但是当我刷新页面或直接访问它时,我正在检查布局,如果request.isajaxrequest,那就是魔术。