如果存在 index.html,如何代替 React 应用提供服务

如果存在 index.html,如何代替 React 应用提供服务

我正在设置一个 Apache/2.4.29 (Ubuntu) 服务器来托管一个 ReactJS 单页应用程序(因此它会为任何不存在的 URL 返回应用程序),但我还提供了某些静态 HTML 页面(全部在一个名为 的特定目录下projects)。现在,如果您点击任何未指定文件的目录,它会/var/www/html/index.html在 中提供我的 React 应用程序(来自 ),但如果目录存在且包含一个名为 的文件index.html,我需要它来提供 index.html,就像 Apache 默认所做的那样。项目目录与其他所有内容一起位于 /var/www/html 中。我的配置有什么问题?

<VirtualHost *:80>
    <Directory  "/var/www/html"> 
        RewriteEngine on

        RewriteCond %{HTTP_ACCEPT} text/html
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.html [last]

        RewriteRule ^ - [last]

        AllowOverride None
        Options FollowSymLinks Multiviews

        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

答案1

我刚刚添加了一个RewriteCond!-d测试是否存在同名的目录。

<VirtualHost *:80>
    <Directory  "/var/www/html"> 
        RewriteEngine on

        RewriteCond %{HTTP_ACCEPT} text/html
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^ index.html [last]

        RewriteRule ^ - [last]

        AllowOverride None
        Options FollowSymLinks Multiviews

        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

似乎有效!

相关内容