Angularjs 如何使html5Mode应用程序与根相关而不是与服务器根相关
为了帮助SEO和深度链接,我在angular项目中打开了HTML5模式,如下所示: index.html web.configAngularjs 如何使html5Mode应用程序与根相关而不是与服务器根相关,angularjs,iis,url-rewriting,Angularjs,Iis,Url Rewriting,为了帮助SEO和深度链接,我在angular项目中打开了HTML5模式,如下所示: index.html web.config 我的IIS Express调试根目录是http://localhost:10223我的本地开发人员根目录是http://myvirtualmachine/webapplicationname /webapplicationname/在我的调试设置中不存在。在过去的开发环境中,它也不存在。但有人告诉我,任何环境都可能不在根目录下,或者位于web应用程序文件夹中,其
我的IIS Express调试根目录是http://localhost:10223
我的本地开发人员根目录是http://myvirtualmachine/webapplicationname
/webapplicationname/
在我的调试设置中不存在。在过去的开发环境中,它也不存在。但有人告诉我,任何环境都可能不在根目录下,或者位于web应用程序文件夹中,其名称我无法控制,因此我无法依赖或创建模式
我只想使用/
作为我的基础。如果我这样做了,它将在调试中工作。我希望在其他环境中使用该功能,而不管web应用程序相对于web服务器根位于何处
目前,如果我将根目录更改为/
,如
和
,/
指向本地开发环境中的错误位置。它将指向http://myvirtualmachine/
而不是http://myvirtualmachine/webapplicationname
,这将导致404s。它需要指向我的应用程序的根,而不是web服务器的根
如何在此处获得类似于~/
-的功能?您可以使用$locationProvider,而不是更改基础
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
这应该对你有帮助 您可以使用$locationProvider,而不是更改基数,如
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
这应该对你有帮助 以下是我为使这项工作正常进行所做的工作。如果有人有更干净的方法,请告诉我
正如Rabi所说,我确实关闭了requireBase
,我认为如果您动态创建基础,这会有所帮助
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
我不是在
,而是在html head
元素中的同一位置执行此操作:
<script type="text/javascript">
var firstPathPart = document.location.pathname.split("/")[1];
var href;
switch (firstPathPart) {
case '':
case 'login':
case 'forgot-password':
case 'activation':
case 'home':
case 'mymainmenu1':
case 'mymainmenu2':
case 'profile':
href = '/';
break;
default:
href = '/' + firstPathPart + '/';
};
document.write("<base href='" + href + "' />");
</script>
var firstPathPart=document.location.pathname.split(“/”[1];
var href;
交换机(firstPathPart){
案例“”:
案例“登录”:
案例“忘记密码”:
案例“激活”:
“家”案例:
案例“mymainmenu1”:
案例“mymainmenu2”:
个案‘简介’:
href='/';
打破
违约:
href='/'+firstPathPart+'/';
};
文件。填写(“”);
基本上是说动态地写基。写基指向url路径的第一段,除非这恰好是我的顶级角度路径之一,在这种情况下,使根/
在web.config中,我保留了对/webapplicationname/
的引用。这在我们的商店是允许的,因为web.config
被认为是特定于环境的。因此,它可以随环境的不同而变化,并且可以包含单独的设置进行管理
我为什么要这样做?因为我们的商店不接受在不同的环境中使用不同的东西index.html
是源代码,不是配置。源代码在每个环境中都必须是相同的,尽管像web.config
这样的设置文件是允许变化的。以下是我为实现这一点所做的工作。如果有人有更干净的方法,请告诉我
正如Rabi所说,我确实关闭了requireBase
,我认为如果您动态创建基础,这会有所帮助
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
我不是在
,而是在html head
元素中的同一位置执行此操作:
<script type="text/javascript">
var firstPathPart = document.location.pathname.split("/")[1];
var href;
switch (firstPathPart) {
case '':
case 'login':
case 'forgot-password':
case 'activation':
case 'home':
case 'mymainmenu1':
case 'mymainmenu2':
case 'profile':
href = '/';
break;
default:
href = '/' + firstPathPart + '/';
};
document.write("<base href='" + href + "' />");
</script>
var firstPathPart=document.location.pathname.split(“/”[1];
var href;
交换机(firstPathPart){
案例“”:
案例“登录”:
案例“忘记密码”:
案例“激活”:
“家”案例:
案例“mymainmenu1”:
案例“mymainmenu2”:
个案‘简介’:
href='/';
打破
违约:
href='/'+firstPathPart+'/';
};
文件。填写(“”);
基本上是说动态地写基。写基指向url路径的第一段,除非这恰好是我的顶级角度路径之一,在这种情况下,使根/
在web.config中,我保留了对/webapplicationname/
的引用。这在我们的商店是允许的,因为web.config
被认为是特定于环境的。因此,它可以随环境的不同而变化,并且可以包含单独的设置进行管理
我为什么要这样做?因为我们的商店不接受在不同的环境中使用不同的东西index.html
是源代码,不是配置。源代码在每个环境中都必须是相同的,尽管像web.config
这样的设置文件是允许变化的。它对您有帮助吗?它对您有帮助吗?因此,我是否可以从index.html中删除基本标记?是的,如果您将requireBase设置为false,您不需要定义基本url。因此,我会从index.html中删除基标记吗?是的,如果将requireBase设置为false,则不需要定义基url。