htaccess 句柄从 index.php 重定向到 index.html

htaccess handle redirects to index.html from index.php

我的网站结构如下:

/
|
folder1
    |
    index.php
    index.html

默认打开 index.php 但如果用户未登录,我会打开:

header('Location: '.$domain.'/folder1/index.html');
exit;

这适用于任何文件夹,但对于 folder1,我还有一个 .htaccess(位于站点的根目录)来处理 index.php 上的一些逻辑。 .htaccess 如下:

RewriteEngine on
RewriteBase /
RewriteRule \.(php)$ - [L]
RewriteRule ^folder1/([^/]+)/?$ folder1/index.php?source= [L]

我需要帮助来添加一条规则,这样如果我请求 index.html 它就可以得到服务而不会造成不便。 否则现在 access.log returns:

10.211.55.2 - - [14/Jan/2021:20:15:50 +0100] "GET /folder1/index.html HTTP/1.1" 302 589 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"

并保持一个以 firefox 结束的无限循环说“此站点未正确重定向”。

对于未应用 .htaccess 的任何其他文件夹 access.log 显示正确的行为:

10.211.55.2 - - [14/Jan/2021:21:30:52 +0100] "GET /folder2/ HTTP/1.1" 302 4230 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0"

并且浏览器正确显示 index.html

如何修复 .htaccess 以处理从 index.php 到 index.html 的重定向?

RewriteRule \.(php)$ - [L]

您可以添加另一个例外,就像您对 .php 文件所做的那样。例如,在上面的规则之后,但是 before 你重写为 index.php:

RewriteRule ^folder1/index\.html$ - [L]

任何对 /folder1/index.html 的请求都不会继续,因此不会被后面的指令重写为 index.php(因此不会发生重定向)。