我如何构建指向我的Angular应用程序路线之一的链接?

我如何构建指向我的Angular应用程序路线之一的链接?,angular,angular-routing,angular-router,Angular,Angular Routing,Angular Router,我在www.example.com上运行了一个应用程序,它位于一些静态html页面旁边。我需要提供一个指向www.example.com/guest_register的“注册”链接。这可以在本地工作,但不能在服务器上工作 背景: 当我在本地运行时,我可以创建指向的链接,该链接可以很好地注册新用户。在服务器上,指向的链接出现404错误……指向的链接将我发送到我的index.html。我试着凭直觉加上这个,但我不确定真正的区别是什么 服务器的public_html目录如下所示: index.html

我在www.example.com上运行了一个应用程序,它位于一些静态html页面旁边。我需要提供一个指向www.example.com/guest_register的“注册”链接。这可以在本地工作,但不能在服务器上工作

背景:

当我在本地运行时,我可以创建指向的链接,该链接可以很好地注册新用户。在服务器上,指向的链接出现404错误……指向的链接将我发送到我的index.html。我试着凭直觉加上这个,但我不确定真正的区别是什么

服务器的public_html目录如下所示:

index.html//静态页面 main.html//我的实际角度应用程序 风格。--.js 脚本。--.js 运行时。-.js polyfills.js main.-.js 3rdpartylicenses.txt 资产/

我为公众提供index.html,然后根据需要链接到main.html以登录注册用户。在本地,浏览器地址栏从file://..index.html 当我链接到我的应用程序时发送到localhost:4200。在服务器上,地址栏从www.example.com重新加载到www.example.com

这是我在app.module.ts中的路线图:

const appRoutes: Routes = [
  { path: '', component: WizardComponent, canActivate: [AuthGuard] },
  { path: 'login', component: LoginComponent },
  { path: 'guest', component: GuestComponent },
  { path: 'admin', component: AdminComponent, canActivate: [AdminGuard] },
  { path: '**', redirectTo: '' }
];
.
.
@NgModule({
  declarations: [
.
.
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    RouterModule.forRoot(appRoutes),
.
.
不要太花哨。那么,是什么阻止我在服务器上直接将/guest附加到URL的末尾,而不是本地

编辑:当请求无法识别的URL时,我的应用程序似乎正在返回index.html,而应该返回main.html我的应用程序:

My.htaccess中已经有几行神秘的代码,我只能很好地理解它们,当maintenance.enable存在时,它们可以将除我的IP之外的所有用户重定向到maintenance.html:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^MY\.IP\.ADD\.RESS
RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
RewriteCond %{DOCUMENT_ROOT}/maintenance.enable -f
RewriteCond %{REQUEST_URI} !^/maintenance\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
#RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^(.*)$ /maintenance.html [R=302,L]
</IfModule>

如何将官方文档中的建议整合到现有的.htaccess文件中?

我将进一步阐述我的评论。在编译Angular项目时,它会将所有内容压缩到一个文件中,这通常被称为一个历史文件,这与web服务器的设置方式非常不同

第一个/后的部分通常转换为文件。那么在

www.example.com/guest_register
现成的服务器在www文件夹中查找guest_register.html。对于单页应用程序,不满足此前提条件。您没有名为guest_register.html的文件,因此服务器以404响应

angular router所做的是,接受原始请求并确定要为您服务的页面

在生产环境中,应用程序的唯一入口点是index.html,因此需要明确地告诉服务器将任何404重定向到index.html回退是技术术语

在本地运行时,这不是问题

ng serve
因为此命令启动的本地服务器是

详细说明了如何配置

复制下面的突出显示,以防链接下降,这似乎是最近经常发生在有角度的页面上

阿帕奇:

添加到.htaccess

重写规则^/index.html

Nginx:

try_files $uri $uri/ /index.html;
火基:

添加以重写规则

"rewrites": [ {
  "source": "**",
  "destination": "/index.html"
} ]

希望有帮助

需要配置服务器@sinanspd那么,我应该能够编辑.htaccess以返回main.html而不是index.html,我的路由将开始工作?对吗?我需要一些帮助,因为我现有的.htaccess中已经有一些神秘的东西,如果“maintenance.enable”存在的话,可以发送到“maintenance.html”。这非常有帮助,但是我的.htaccess不是空的。请查看我对原始帖子的编辑。鉴于我现有的.htaccess文件,我不确定在何处添加推荐的节。@JohnMarquez查看您的.htaccess,它看起来像是加载维护模块的备份。我猜这不应该干扰你的路径,因为它们似乎没有重叠。您只需将AngularRewrites附加到ifmodule之外的文件末尾。确保重新启动服务器或apache,.htaccess基本上是启动时加载的配置文件。如果它不起作用,试着评论一下有什么,但这不是必须的
try_files $uri $uri/ /index.html;
"rewrites": [ {
  "source": "**",
  "destination": "/index.html"
} ]