为了避免 Apache 服务器上的 404 错误,您必须启用mod_rewrite并在根目录中添加.htaccess文件
步骤 1 — 启用 mod_rewrite
首先,我们需要激活mod_rewrite。它可用,但未通过干净的 Apache 2 安装启用。
sudo a2enmod rewrite
这将激活module或提醒您该module已启用。要使这些更改生效,请重新启动 Apache。
sudo systemctl restart apache2
或者
sudo service apache2 restart
第 2 步 - 设置 .htaccess
默认情况下,Apache 禁止使用.htaccess文件来应用重写规则,因此首先您需要允许对文件进行更改。使用 nano 或您喜欢的文本编辑器打开默认的 Apache 配置文件。
sudo nano /etc/apache2/sites-available/000-default.conf
在该文件中,您会发现从第一行开始的< VirtualHost *:80>块。在该块内,添加以下新块,使您的配置文件如下所示。确保所有块都正确缩进。
<VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
. . .
</VirtualHost>
如果你配置了 https,你会在第一行找到一个< VirtualHost *:443>块。在该块内,添加以下新块,使您的配置文件如下所示。确保所有块都正确缩进。在这种情况下,您还需要在 HTTP 和 HTTPS 的 2 个虚拟主机下面添加这个
<VirtualHost *:443>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
. . .
</VirtualHost>
保存并关闭文件。要使这些更改生效,请重新启动 Apache。
sudo systemctl restart apache2
或者
sudo service apache2 restart
第 3 步 — 创建 .htaccess
现在,在 Web 根目录中创建以下 .htaccess 文件。
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
如果您已经启用了 mod_rewrite 并应用了重写规则,请跳过第 1 步和第 2 步,直接使用第 3 步
我参考了Digital Ocean的React和服务器设置文档