为了帮助SEO和深层链接,我在我的角度项目中启用了html 5模式,如下所示:
的index.html
<base href="/webapplicationname/">
app.js
// use the HTML5 History API
$locationProvider.html5Mode(true);
的web.config
<system.webServer>
<rewrite>
<rules>
<rule name="Main Rule" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/webapplicationname/" />
</rule>
</rules>
</rewrite>
</system.webServer>
我的IIS Express调试根目录是http://localhost:10223
,我的本地dev根目录是http://myvirtualmachine/webapplicationname
。
/webapplicationname/
。它也不存在于开发者之后的其他环境中。但是传给我的是,任何环境都可能不在根目录中,或者位于我无法控制的名称的Web应用程序文件夹中,因此我无法指望或制作模式。
我想将/
用作我的base
。如果我这样做,它将在调试中起作用。我想在其他环境中使用该工作,无论Web应用程序相对于Web服务器根目录的位置如何。
就目前而言,如果我将根更改为/
,如<action type="Rewrite" url="/" />
和<base href="/">
,则/
指向我本地开发环境中的错误位置。它会指向http://myvirtualmachine/
而不是http://myvirtualmachine/webapplicationname
,这将导致404。它需要指向我的应用的根,而不是Web服务器的根!
如何在此处获得~/
类功能?
答案 0 :(得分:0)
您可以使用$ locationProvider,而不是更改基础,而不是
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
这应该对你有所帮助。
答案 1 :(得分:0)
以下是我为此工作所做的工作。如果有人有更清洁的方式,请告诉我。
我确实关闭了requireBase
,正如拉比说的那样,如果你动态创建基地,我认为这会有所帮助。
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
而不是<base href="WhateverTheApplicationRootIs" />
,我在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>
基本上说是动态写入基数。将基数写入指向url路径的第一个段,除非它恰好是我的顶级角度路径之一,在这种情况下创建根/
。
在web.config中,我将引用保留为/webapplicationname/
。这在我们的商店是允许的,因为web.config
无论如何都被认为是环境特定的。因此,允许从环境到环境变化,并且管理包含单独的设置。
为什么我这样做?因为我们的商店不接受在不同环境中使用不同的东西。 index.html
是源代码,而不是配置。虽然允许web.config
等设置文件发生变化,但源代码必须在每个环境中都相同。