我正在设置一个 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>
似乎有效!