將所有非根路由重定向到 Amazon Linux 2 和 Apache 上的 index.html
Amazon Linux 2 實例正在使用 Apache 託管 Angular 7 應用程序。Angular 7 應用程序不僅包括
index.html
,還包括幾個.js
文件和一個名為assets
.我需要使用什麼特定語法來確保所有非指定路由對 Apache 的請求都被重定向到
index.html
位於DocumentRoot
? 請注意,所需的語法還需要允許在載入客戶端瀏覽器時.js
將目錄的所有文件和內容assets
作為輔助請求index.html
。例如,如果遠端 Web 瀏覽器請求
mydomain.com/randomCharacters
,我希望 Apache 以index.html
與 Apache 響應對mydomain.com
with的請求相同的方式返回index.html
。然後index.html
必須能夠訪問.js
文件和assets
子目錄的內容。(在這種情況下,
DocumentRoot
是一個名為 的目錄/var/www/mydomain.com/public_html
。此外,該/var/www/mydomain.com/public_html
目錄包括 1.index.html
、2. 幾個.js
文件和 3.assets
包含圖像等內容的子目錄。)我想在塊
RedirectMatch
內部使用VirtualHost
以保持配置盡可能乾淨。這是我的想法。下面需要怎麼修改?<VirtualHost *:80> ServerName www.mydomain.com ServerAlias mydomain.com DocumentRoot /var/www/mydomain.com/public_html ErrorLog /var/www/mydomain.com/error.log CustomLog /var/www/mydomain.com/requests.log combined RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com </VirtualHost>
結果的取證分析:
當在 Firefox 的開發人員工具中打開網路選項卡嘗試上述操作時,我在 中發出請求
http://mydomain.com
時RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com
,VirtualHost
結果是所有請求/
都顯示已給出304
響應,而對命名文件(如腳本)的所有請求並且樣式表顯示已給出302
響應。此外,當我查看
html
同一請求的頁面源時,我看到index.html
確實正確地提供了內容,但瀏覽器仍然為空,因為其中的程式碼index.html
無法訪問.js
文件或assets
子目錄的內容。所以問題是
RedirectMatch 302 ^/(?!index.html$).+ http://mydomain.com
需要重寫以允許.js
文件和assets
子目錄的內容。 **解決這個問題需要什麼特定的語法,以便 Apache 可以成功地為 Angular 7 應用程序提供服務,無論在http://mydomain.com**之後添加什麼字元串?
您可以在上下文中使用
RewriteRule
這樣的:VirtualHost
RewriteEngine On # if not a regular file RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f # and not a directory RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d # then rewrite to index.html RewriteRule ^.*$ /index.html [L]
我想讓你的配置“盡可能乾淨”,然後不要做這樣的事情,讓 Apache 返回一個 HTTP 404,因為它應該。