Angular - 在此服务器上找不到请求的 URL /home

Posted

技术标签:

【中文标题】Angular - 在此服务器上找不到请求的 URL /home【英文标题】:Angular - The requested URL /home was not found on this server 【发布时间】:2018-05-28 14:17:07 【问题描述】:

我会很简短。

我有一个带有简单导航菜单 (routerLinks) 的 Angular 项目。 如果它在本地主机上,一切都按预期工作,由 angular cli 提供支持。

但是当我将它部署在真实服务器上时(我没有任何 VPS 或任何其他服务器,只有可以放置文件的文件夹)奇怪的事情开始发生。

应用程序功能正常,导航功能正常,routeLinks 路由,但是当我刷新浏览器或尝试手动将某些内容写入 URL 行时,每次我得到 404 Not found。 (所以我在 [domain]/home - 一切正常,但是当我刷新浏览器时,我得到 404 /home not found。

也许我在一个不好的地方寻找一个问题,这不是角度问题,而是关于 HTTP 请求的问题(我不太了解)。

你知道我应该从哪里开始吗?

谢谢你,帕维尔 F。

我正在谈论的项目:http://www.pavel-challenge.cz(不,这不是广告:D)

app-routing.module.ts

import  NgModule  from '@angular/core';
import  RouterModule, Routes  from '@angular/router';

import  PassionsComponent  from './passions/passions.component';
import  QuestionComponent  from './question/question.component';
import  AboutComponent  from './about/about.component';
import  HomeComponent  from './home/home.component';
import  KnowledgeComponent  from './knowledge/knowledge.component';

const routes: Routes = [
   path: '', redirectTo: '/home', pathMatch: 'full' ,
   path: 'home', component: HomeComponent ,
   path: 'about', component: AboutComponent ,
   path: 'knowledge', component: KnowledgeComponent ,
   path: 'questions', component: QuestionComponent ,
   path: 'passions', component: PassionsComponent ,
   path: '**', redirectTo: '/home', pathMatch: 'full' 
];

@NgModule(
  imports: [ RouterModule.forRoot(routes) ],
  exports: [ RouterModule ]
)
export class AppRoutingModule 

navbar.component.html

  <ul>
    <li><a routerLink="/about">About</a></li>
    <li><a routerLink="/knowledge">Knowledge</a></li>
    <li><a routerLink="/questions">Questions</a></li>
    <li><a routerLink="/passions">Passions</a></li>
  </ul>

【问题讨论】:

代码在哪里? 我不确定我应该展示什么。一切正常,除了我所描述的问题。所以也许问题在于忽略了某些东西,而不是糟糕的编码。 【参考方案1】:

已修复:(用于 Apache HTTP 服务器)

我创建了 .htaccess 文件并将其放入提供商端的根文件夹中。

.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.html [L]
</IfModule>

【讨论】:

我已将我的 Angular 应用程序(产品)上传到运行 apache 的 unix 服务器。我在 /htdocs/testApps/myAngularApp 里面。我尝试将该文件包含在我的根目录/htdocs/testApps/.htaccess 中,并将rewriteRule 编辑为RewriteRule . /myAngularApp/index.html [L]。但我仍然无法重新加载我的页面。我在做什么有什么问题? 帮助了,谢谢!我已将 .htaccess 文件添加到 my project 根文件夹中。对于 Angular,它是 dist 文件夹的子文件夹。 我在 /var/www/html/dist 和 /var/www/html 中添加“.htaccess”,然后重新启动 apache2。我总是找不到相同的错误 404。【参考方案2】:

如果你在 Apache 上部署,你应该启用 mod_rewrite 模块:

sudo a2enmod 重写

然后重启 Apache,sudo systemctl restart apache2

然后按照上一个答案在 .htaccess 中进行建议的更改

【讨论】:

【参考方案3】:

问题在于您的 HTTP 服务器配置。

您必须将主机名之后的所有 URL 都指向嵌入 Angular 应用程序的 HTML 资源。

就像在 nginx 中一样:

 location / 
       root <path to index.html>;
       try_files $uri  /index.html =404;
( if ressource exist serves it, likes images, else load index.html to load angular app )
    

here is the official documentation

在初始加载后导航时,Angular路由器带头,无需http请求即可动态显示位置变化后的数据。

但是如果你直接加载到<...>/home http服务器肯定会尝试加载一个文件home.html,然后发送404。

【讨论】:

哦...这似乎是合乎逻辑的,在我在这里问之前我已经看到了。现在的问题是:“如果我没有任何/或至少我不知道任何服务器,我该如何配置服务器。我可以在我的应用程序端配置它吗? 不幸的是,你不能。这里的问题与http相关。在角度开始之前的方式。除非您为应用程序的每条路由创建指向 index.html 的符号链接,例如应用程序目录中的 home -> index.html。 好的,现在我知道我的提供商使用 Apache 服务器了。您认为我可以通过创建具有适当设置的 .htaccess 文件来解决我的问题吗? 是的,我想是的,您可以在 angular.io/guide/deployment#development-servers 的示例中使用 .htaccess 谢谢你,皮埃尔。我们明白了:)

以上是关于Angular - 在此服务器上找不到请求的 URL /home的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 请求的 URL / 在此服务器上找不到

Laravel 8“在此服务器上找不到请求的资源 /dashboard。”

Laravel - 未找到 - 在此服务器上找不到请求的资源/控件

在此服务器 django 上找不到请求的 URL

Laravel :: 在此服务器上找不到请求的资源 /hello

MKTileOverlay - “在此服务器上找不到请求的 URL。”