2017-09-19 101 views
2

我想弄清楚如何設置Apache Tomcat服務器來爲角度應用程序提供深層鏈接。例如:在Apache Tomcat 404深度鏈接上部署角度應用程序問題

靜態服務器在收到mysite.com/的請求時,會定期返回index.html。但它拒絕mysite.com/heroes/42並返回一個404 - Not Found錯誤,除非它被配置爲返回index.html。

我想要服務於localhost /角,我試圖角應用以下:

1)建立的角應用與:

ng build --prod --base-href . 

2)複製生成文件夾的內容(默認值:DIST)到$ ApacheLocation/web應用/角

3)$ ApacheLocation/CONF /卡塔利娜/本地主機/ rewrite.config添加的RewriteRules

# 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 ^\/angular\/.*$ /angular/index.html 

4)添加閥略低於主機標籤

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve"/> 

5)啓動Tomcat服務器和去到localhost /角度會給我:

未捕獲的SyntaxError:意外的標記<所有的.js包(例如main.bundle.js)

如果我不包含重寫規則,tomcat將按預期提供localhost/angular ,但會在深層鏈接上提供404。

我的設置配置:

  • Tomcat的版本9.0.0.M26
  • 角版本4.4.2
  • @角/ CLI:1.4.2
  • 節點:8.5。 0
  • npm:5.4.2
  • os:linux x64
+0

我有這個問題,我知道如何解決這個問題,只是留下你的**索引.html **內容和你想放置你的項目的路徑。然後我會留下一個答案,只需回答我,當你完成那 –

+0

這裏是測試項目的完整鏈接:https://github.com/avuletica/test嘗試在localhost/angular @valakhosravi上託管它 –

+0

我想查看你的** dist **文件夾(在' ng build --prod --base-href')。 –

回答

2

我設法解決這個問題例如http://localhost:8080/angular/player/detail/4具有以下步驟:

1)建立的角應用與:納克建立--prod -bh ./的建造-d /角

2)複製內容應用到$ ApacheLocation/web應用/角

3)重寫規則:

RewriteCond %{REQUEST_PATH} !-f 
RewriteRule ^/angular/(.*) /angular?path=$1 

4)在app.component設置導航。TS:

constructor(private activatedRoute: ActivatedRoute, private router: Router) { } 

ngOnInit() { 
const path = this.activatedRoute.snapshot.queryParams['path']; 
const navigateTo = '/' + path; 

if (path) { 
    this.router.navigate([navigateTo]); 
} 

}

你可以找到測試項目位置:https://github.com/avuletica/test

的重寫規則說明:

# %{REQUEST_PATH} corresponds to the full path that is used for mapping. 
# ! NOT character 
# '-f' (is regular file) Treats the TestString as a pathname and tests whether or not it exists, and is a regular file. 
#^matches the beginning of the string or line 
# . matches any charceter except line breaks 
# * match 0 or more of the preceding token 

所以基本上如果是在沒有文件/角/任何東西tomcat將完整路徑作爲查詢字符串發送到角度應用程序,並從該查詢參數角度處理路由。

相關問題