我需要强制所有请求(无论它们是什么)到 index.html。不幸的是,我尝试过的所有方法都没有奏效。
在我看来,下面的代码应该可以工作,但实际上却不行。我的理解是,它表示对于不以 /index.html 结尾的任何内容,实际上都会请求 index.html 文件。
重定向 302 !^/index.htmlhttp://www.example.com/index.html
如能得到任何帮助/澄清,我们将不胜感激。
答案1
在根文件夹上使用 .htaccess 应该可以完成这项工作:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteRule . /index.html [R=302,L]
条件和规则是,如果请求与 index.html 不匹配,它将把所有内容重定向到它
答案2
@prix 的回答很好。我自己需要添加条件,以便正常提供正常资源(图像和 css):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt|svg|woff|ttf|eot)$
RewriteRule . index.html [L]
答案3
我投票赞成其他答案,但最终它们对我没什么帮助,因为我在 index.html 文件中加入了徽标。以下是我的调整。首先,先决条件。
改变
AllowOverride None
到
AllowOverride All
在
/etc/apache2/apache2.conf
…
<Directory /var/www/>
/var/www/html
在(示例)中启用 .htaccess 文件。
创建或编辑文件
/var/www/html/.htaccess
有内容
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.+/logo\.png$
RewriteRule . /logo.png [L]
RewriteCond %{REQUEST_URI} !^/index\.html$
RewriteCond %{REQUEST_URI} !^/logo\.png$
RewriteRule . /index.html [L]
如您所见,我没有使用重定向。这意味着用户输入的路径或 URI 保持不变;尽管如此,index.html 页面仍会显示徽标。