angular2也在生产模式中从网址中删除#

时间:2017-10-30 12:36:24

标签: angular iis angular2-routing

要从网址中删除#,我将其放在app.module.ts

providers: [
                ...,
                {provide: LocationStrategy, useClass: PathLocationStrategy},
                ...

本地主机:4200 /分类

本地主机:4200 /#/分类

在localhost中一切正常,但是当我使用此命令构建生产时

ng build --environment=prod --bh=/site/ --aot --no-sourcemap

在文件enviroment.prod.ts中我有:

export const environment = {
    production: true,
    baseUrlBuilderMask: 'http://site_url/',
    baseUrlApi: 'http://site_url/site/api/',
    baseUrlAssets: 'http://site_url/site/assets/'
 }

我在网上试试这个网站,但这不行。

http://site_url/category

给了我404错误。

我正在使用ISS

在我的web.config中我有

<rewrite>
<rules>
<rule name="AngularJS" 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="/" />
</rule>

我需要改变什么?

3 个答案:

答案 0 :(得分:1)

PathLocationStrategy是Angular2中的默认位置策略,如果网址中存在#,则必须将其覆盖在某处。

在模块提供程序旁边,检查模块导入,也可以通过提供{useHash:true}作为RouterModule.forRoot的第二个参数来覆盖它:

进口:[     ...     RouterModule.forRoot(routes,{useHash:true})//删除第二个参数 ]

答案 1 :(得分:0)

使用ng build --environment=prod --aot --no-sourcemap代替ng build --environment=prod --bh=/site/ --aot --no-sourcemap

--bh指定要在index.html中设置的基本href。省略它将使其在生产模式下工作。

答案 2 :(得分:0)

您需要将所有网址都放入index.html。启用html5Mode后,您的网址中将不再使用#字符。 #符号很有用,因为它不需要服务器端配置。没有#,网址看起来更好,但它也需要服务器端重写 follow this Link angular Ui router ,这也是angular issue