Apache 2.2 重写 - 强制所有请求到 index.html

Apache 2.2 重写 - 强制所有请求到 index.html

我需要强制所有请求(无论它们是什么)到 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 页面仍会显示徽标。

相关内容