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
while发出请求,结果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
我想让你的配置“尽可能干净”,然后不要做这样的事情,让 Apache 返回一个 HTTP 404,因为它应该。