.htaccess 重定向索引页时,下列哪个选项是正确的:HTTP或HTTPS版本的网站?

uxhixvfz  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(114)

我不太了解.htaccess文件或Web服务器配置,我一直在试图弄清楚为什么我的网站的index.php文件被重定向到HTTP版本而不是HTTPS。我已经找了好几天的答案了,但我找不到任何可以解释的东西。
问题是我在.htaccess文件中有以下规则:

# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^index\.php$ "http\:\/\/www\.mywebsite\.com\/" [R=301,L] 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

我的问题是关于这条线:RewriteRule ^index\.php$ "http\:\/\/www\.mywebsite\.com\/" [R=301,L]
考虑到我的网站使用HTTPS,将index.php重定向到HTTP版本是正确的吗?
我担心这条规则是否会引起问题,如果这是预期的行为。我想确定我是否正确地重定向到适当的协议。我在我的日志中得到了很多302状态代码,我想这可能是因为重定向错误,应该是到网站的https版本。
我真的很纠结这个问题,我找不到答案。我不能做太多,因为我担心错误的更改会对网站造成伤害。如果有人能帮我弄明白发生了什么我会很感激的。

siotufzp

siotufzp1#

我一直在想为什么我的网站的索引。php文件被重定向到HTTP版本而不是HTTPS。
你在后面的问题中确定“为什么”。..
考虑到我的网站使用HTTPS,重定向索引是否正确。php到HTTP版本,如最后一行所写?
但不,这不是“正确的”,你应该重定向到HTTPS,如果有的话。(回到你身边。..当你的网站在HTTPS上工作时,为什么要重定向到HTTP?这毫无意义,显然是一个错误。**更新:**特别是在下一条规则中,您将重定向到HTTPS!)
我的日志里有很多302状态码

**更新:**根据您更新的问题,您的第二条规则(HTTP到HTTPS重定向)是302(临时)重定向。如果你在第一个规则中重定向到HTTP,那么第二个规则将用第二个重定向来“纠正”这一点!

但是,您不应该在日志中获得“大量”302,因为您首先不应该链接到/index.php。(?)
仔细看看你的指令。..

# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /

该注解可能指的是文件后面出现的RewriteEngine On行?这里不需要RewriteBase指令(它没有被使用),应该删除。

RewriteCond %{HTTP_HOST} ^mywebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com$

既然你说(在评论中)你只有一个域,那么这两个条件是不需要的。

RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$

这些条件由cPanel自动添加。然而,在第一条规则中,它们不是必需的,并且可以移除。(如果请求的URL是/index.php,那么该URL显然不会是这些URL中的一个-因此条件是无意义的。但就像我说的,这些条件是盲目地加在每一条规则之前的--真的有点乱。)

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/cpanel-dcv/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

最后一条规则中缺少R=301L标志。因此,这默认为302(临时)重定向。它应该是301(永久)重定向。
总之,你的规则可以写得更简单,如下所示:

RewriteEngine On

# Redirect "/index.php" to "/" (and HTTPS)
RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L] 

# Redirect HTTP to HTTPS (except for the ".well-known" directory)
RewriteCond %{HTTPS} off
RewriteRule !^\.well-known/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

我在HTTPtoHTTPS(second)规则中使用了更宽泛的方法,排除了指向/.well-known子目录的所有URL。(尽管cPanel可能会在SSL证书自动续订时重新添加这些条件!)
不需要在 substitution 字符串中使用所有反斜杠转义符(这是典型的cPanel)。
请注意,这并不规范化www vs non-www。这是留给读者的练习。

相关问题