【问题标题】:Angular 2 Routing, .htaccessAngular 2 路由,.htaccess
【发布时间】:2017-05-08 15:36:43
【问题描述】:

我的路由有一些问题。它在 localhost 上运行良好,但是当我将它放在服务器上并刷新页面时,我收到 404 错误。

所以我创建了一个.htaccess 文件并将其放在与我的index.html 相同的位置:

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

但它仍然无法正常工作我做错了什么? 我必须在我的 Angular 路由中添加一些东西吗? 有人可以帮忙吗?

【问题讨论】:

  • “把它和我的 index.html 放在同一个地方”——“同一个地方”到底在哪里?子目录?文档根目录?
  • 等一下...您是否仅实施此 .htaccess 文件以尝试解决您的 404 错误?您的localhost 上没有.htaccess 文件吗?

标签: .htaccess angular routing angular2-routing


【解决方案1】:
RewriteRule ^ /index.html

尝试删除RewriteRule 上的斜线前缀替换。例如:

 RewriteRule ^ index.html [L]

现在这是相对于当前目录(index.html 文件所在的目录),而不是文档根目录。


# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

注意你问题的原因,但是%{DOCUMENT_ROOT}%{REQUEST_URI}%{REQUEST_FILENAME}是一样的,所以更常见的写成这样:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

但是,在此之前添加检查已知资产的文件扩展名会更有效,以避免必须检查每个请求以查看它是文件还是目录(这相对昂贵)。例如:

# Allow any request for CSS, JS and images straight through...
RewriteRule .\.(css|js|jpe?g|png|gif) - [L]

【讨论】:

  • 我会试试这个@w3dk 但还有其他想法我还需要做吗?我还需要添加其他内容吗?
  • 我不知道您是否需要做“其他事情”。但是您说它在 localhost 上工作正常,但在服务器上却不行,并提交了您的.htaccess。我上面提到的一件事是可能阻止它在实时服务器上工作。你还没有回答我上面的问题......这个.htaccess 文件在哪里?
  • 我现在使用 Heroku 来托管我的应用程序我的 .htaccess 文件现在与索引在同一个地图中,即地图模板/freemarker
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
相关资源
最近更新 更多