如何将 http 重定向到 https 加上将 `index.html` 重定向到 .htaccess 中的另一个 html 页面?

how to redirect http to https plus redirect `index.html` to another html page in .htaccess together?

我在 .htaccess 中有一个将 http 重定向到 https 的代码,但我还想添加一个将 index.html 页面重定向到另一个 html 页面的代码。在 .htaccess 中有没有办法同时进行这两项操作?下面提供了代码。

http 到 https 代码

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

index.html到另一个html页面代码

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]

您想首先执行 http --> https,因为这同时适用于原始和重定向以实现安全通信。

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
    Header always set Content-Security-Policy "upgrade-insecure-requests;"

现在您可以将重定向应用到 index.php

     <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteBase /
     RewriteRule ^index\.php$ - [L]
     RewriteCond %{REQUEST_FILENAME} -f
     RewriteCond %{REQUEST_FILENAME} -d
     RewriteRule . /index.php [L]
     </IfModule>

您可以调整 -f-d 以包含 ! and/or 更改文件名类型以满足您的特定需求。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]

是的,这是一个外部重定向,从 http(s)://example.com/ 重定向到 http://example.com/index.php。但是,您正在重定向到 HTTP,而不是 HTTPS,并且您正在重定向到 index.php,而您在问题中陈述了 index.html。似乎不需要检查请求的主机名,除非您有多个域并且特别只想重定向一个实例。

除非您计划实施 HSTS,否则请在您的一般 HTTP 到 HTTPS 重定向之前包含此重定向,并在您的 HTTP 到 HTTPS 重定向中包含规范主机名。

例如:

RewriteEngine On

# Redirect / or /index.html TO /dir/index.html (HTTPS)
RewriteRule ^(index\.html)?$ https://example.com/dir/index.html [R=302,L]

# Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L]

但是,在阅读您的 后,外部“重定向”可能不是您问题的正确解决方案。听起来您可能“错误地”link访问文档根目录中的文件,而您应该link访问子目录中的文件? (真的,如果是这种情况,你应该更正你的内部 links...)但是,一个可行的解决方案可能是 内部重写 请求到所需的 URL-path 或更改 DirectoryIndex 如果您要 linking 到文档根目录。这对 user/client 是完全隐藏的 - 用户只看到 URL A,但实际上你在服务 URL B。但这将取决于你的网站的结构。

另一方面,外部重定向会将 user/browser 物理发送到 URL B。他们会同时看到 URL A(他们点击的 link)和 URL B(他们被重定向到的 URL)——搜索引擎机器人也是如此。浏览器需要发出两个请求。这对用户来说可能会更慢,并且会在您的服务器上进行更多工作(不多,但仍然更多)。