Apache 网络主机服务器上 Angular 通用应用程序的 .htaccess 中应该包含什么?
What should be in .htaccess for Angular Universal app on Apache web host server?
这个问题与我问的问题有关,但这是一个更具体的问题,所以我分开问。
我有一个 Angular 通用网络应用程序,我想将其部署在 Apache 网络服务器上。我安装了 pm2 来启动应用程序并使其保持活动状态。它正在侦听端口 4000。它在日志中没有显示任何错误,但是当我访问该网站时却收到 403。
我认为 .htaccess 文件中的某些内容不正确或需要在 httpd.conf 文件中进行配置。我对这些文件中到底需要什么感到困惑,因为我读过的几个 links/articles 显示了不同的配置。有人说您只需要 .htaccess 文件。还有人说你还需要在httpd.conf文件中配置一个虚拟主机(我无法访问,因为我在服务器上没有root权限)。
文件夹结构如下所示:
domains
- appname.com
- public_html
- .htaccess
- browser
- index.html
- other files...
- server
- server.js
- package.json
这是我当前的 .htaccess 文件,它应该适用于 https 并重定向到 browser/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]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/browser/index.html
我也试过 this configuration 将虚拟主机放在 .htaccess 文件中,但这不起作用。
总结一下我的问题:
要使 Angular 应用正常工作,.htaccess 文件中到底需要什么?
虚拟主机标签是否也应该在 .htaccess 中,还是只能在 httpd.conf 文件中使用?
更新
我联系了我的虚拟主机。他们说不可能将虚拟主机添加到 .htaccess 文件中。所以我只需要考虑 https 的重定向 rewriteRule。
与我的虚拟主机一起,我让它开始工作。所以他们在 httpd.conf 文件中放入的是两个端口的代理设置(http 为 80,https 为 443)。我的应用程序在端口 4000 上运行,因此他们必须向该端口添加代理设置。 httpd.conf 文件现在可能看起来像这样:
<VirtualHost *:80>
ServerName domainname.com
ServerAlias www.domainname.com
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
</VirtualHost>
<VirtualHost *:443>
ServerName domainname.com
ServerAlias www.domainname.com
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://localhost:4000/
ProxyPassReverse / https://localhost:4000/
</VirtualHost>
所以您应该将您的域名添加到 serverName 和 serverAlias 变量并将代理设置为 localhost:4000,或者任何 angular 处于 运行 上。
然后我将 .htaccess 文件移动到我的 index.html 所在的浏览器文件夹并将其更改为:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
</IfModule>
这个问题与我问的问题
我有一个 Angular 通用网络应用程序,我想将其部署在 Apache 网络服务器上。我安装了 pm2 来启动应用程序并使其保持活动状态。它正在侦听端口 4000。它在日志中没有显示任何错误,但是当我访问该网站时却收到 403。
我认为 .htaccess 文件中的某些内容不正确或需要在 httpd.conf 文件中进行配置。我对这些文件中到底需要什么感到困惑,因为我读过的几个 links/articles 显示了不同的配置。有人说您只需要 .htaccess 文件。还有人说你还需要在httpd.conf文件中配置一个虚拟主机(我无法访问,因为我在服务器上没有root权限)。
文件夹结构如下所示:
domains
- appname.com
- public_html
- .htaccess
- browser
- index.html
- other files...
- server
- server.js
- package.json
这是我当前的 .htaccess 文件,它应该适用于 https 并重定向到 browser/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]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/browser/index.html
我也试过 this configuration 将虚拟主机放在 .htaccess 文件中,但这不起作用。
总结一下我的问题: 要使 Angular 应用正常工作,.htaccess 文件中到底需要什么? 虚拟主机标签是否也应该在 .htaccess 中,还是只能在 httpd.conf 文件中使用?
更新
我联系了我的虚拟主机。他们说不可能将虚拟主机添加到 .htaccess 文件中。所以我只需要考虑 https 的重定向 rewriteRule。
与我的虚拟主机一起,我让它开始工作。所以他们在 httpd.conf 文件中放入的是两个端口的代理设置(http 为 80,https 为 443)。我的应用程序在端口 4000 上运行,因此他们必须向该端口添加代理设置。 httpd.conf 文件现在可能看起来像这样:
<VirtualHost *:80>
ServerName domainname.com
ServerAlias www.domainname.com
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
</VirtualHost>
<VirtualHost *:443>
ServerName domainname.com
ServerAlias www.domainname.com
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://localhost:4000/
ProxyPassReverse / https://localhost:4000/
</VirtualHost>
所以您应该将您的域名添加到 serverName 和 serverAlias 变量并将代理设置为 localhost:4000,或者任何 angular 处于 运行 上。
然后我将 .htaccess 文件移动到我的 index.html 所在的浏览器文件夹并将其更改为:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
</IfModule>