如何将 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)——搜索引擎机器人也是如此。浏览器需要发出两个请求。这对用户来说可能会更慢,并且会在您的服务器上进行更多工作(不多,但仍然更多)。
我在 .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]
但是,在阅读您的 DirectoryIndex
如果您要 linking 到文档根目录。这对 user/client 是完全隐藏的 - 用户只看到 URL A,但实际上你在服务 URL B。但这将取决于你的网站的结构。
另一方面,外部重定向会将 user/browser 物理发送到 URL B。他们会同时看到 URL A(他们点击的 link)和 URL B(他们被重定向到的 URL)——搜索引擎机器人也是如此。浏览器需要发出两个请求。这对用户来说可能会更慢,并且会在您的服务器上进行更多工作(不多,但仍然更多)。