2017-05-08 197 views
0

我的路由有問題。它在localhost上工作正常,但是當我把它放在服務器上並刷新頁面時,我得到一個404錯誤。Angular 2路由,.htaccess

所以我做了一個.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路線嗎? 有人可以幫忙嗎?

+0

「把它放在與我的index.html相同的地方」 - 究竟哪裏是「同一個地方」?一個子目錄?文檔根? – MrWhite

+0

掛上......你是否只實現了這個'.htaccess'文件來試圖解決你的404錯誤?你的'localhost'上沒有'.htaccess'文件嗎? – MrWhite

回答

0
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] 
+0

我會嘗試這個@ w3dk,但有其他人認爲我也需要做?我是否還需要添加其他內容? – user3356007

+0

我不知道你是否需要做「別的事」。但是你說在本地主機上工作正常,但不在服務器上,並顯示你的'.htaccess'。我上面提到的事情是一件事情,它可以阻止這種在現場服務器上工作。你沒有回答我上面的問題......這個'.htaccess'文件在哪裏? – MrWhite

+0

現在我使用Heroku來託管我的應用程序,我的.htaccess文件現在與索引位於相同的地圖上,那就是地圖模板/ freemarker – user3356007