要从网址中删除#,我将其放在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/'
}
我在网上试试这个网站,但这不行。
给了我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>
我需要改变什么?
答案 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