我的网站页面有http和https,只有https该如何解决?

我的网站页面有http和https,只有https该如何解决?

我遇到了 HTTP 重定向问题:

我开始说我的主页完美地将 HTTP 重定向到 HTTPS。我的所有页面也都显示 HTTPS,但是一旦我将 URL 设置为 HTTP,或者只设置 HTTP,www.example.co.uk/page1它就会转到 HTTP。

例如:

https://example.co.uk/about-us/

http://example.co.uk/about-us/

我的.htaccess文件中已经有此代码:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} (www\.)?example.co.uk
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我已将其更改为代码,我看到有人提到可以解决该问题:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

但它仍然不起作用,两者都有同样的问题。

编辑#1:我在提到的代码上面还有另一个代码,它一直都在那里:

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

编辑#2:我的完整.htaccess文件:

完整的 .htaccess 文件

答案1

我上面提到的代码上面还有另一个代码

您把代码放错了位置。您的 HTTP 到 HTTPS 重定向需要取消现有代码位于文件的最顶部.htaccess

通过将重定向放置在上述代码之后,除了主页(根目录)或现有文件/目录之外,其他任何内容都不会得到处理。因此,您只能看到主页的重定向。

您不需要重复该RewriteEngine指令。

RewriteCond最后还有一个多余的指令,应该将其删除。

换句话说,你.htaccess应该看起来像这样:

# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

但是,除非这是 WordPress 并且您还有# BEGIN WordPress/# END WordPress注释标记,否则<IfModule>包装器是不必要的,并且如果像这样重写会更具可读性:

RewriteEngine On
RewriteBase /

# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Front-controller
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

请注意,我删除了最后一个斜线前缀RewriteRule 代换字符串。(这就是该RewriteBase指令的用途。尽管RewriteBase这里该指令并非绝对必要。)

相关内容