更新

更新

尝试几次后,网站重定向出现错误,我设法执行网站重定向,但它在 Firefox 中间歇性地工作,但在 IE 中根本不起作用。我设法清除所有缓存并在 Firefox 中重试,它工作正常,但奇怪的是它之后不起作用。我确认当时我没有对任何文件进行任何更改。有人知道或遇到过这种情况吗?我很高兴我的网站终于重定向了,即使我高兴了 2 分钟,但结果却没有再次重定向。:((我只是需要它在我输入时重定向http://example.com它重定向到https://www.example.com 以下是我在 .htaccess 文件中的重定向:

RewriteEngine On
#Options +FollowSymLinks
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$[OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

以下是我的日志:

init rewrite engine with requested uri /
pass through /
[perdir D:/wamp64/www/example/] strip per-dir prefix: D:/wamp64/www/example/ -> 
[perdir D:/wamp64/www/example/] applying pattern '.*' to uri ''
[perdir D:/wamp64/www/example/] RewriteCond: input='off' pattern='!on' => matched
[perdir D:/wamp64/www/example/] RewriteCond: input='www.example.com' pattern='^www\\.example\\.com$' => matched
[perdir D:/wamp64/www/example/] rewrite '' -> 'https://www.example.com/'
[perdir D:/wamp64/www/example/] explicitly forcing redirect with https://www.example.com/
[perdir D:/wamp64/www/example/] escaping https://www.example.com/ for redirect
[perdir D:/wamp64/www/example/] redirect to https://www.example.com/ [REDIRECT/301]

我还发现,只有当我从 VPN 注销时,我的网站才会重定向(我需要 VPN,这样我才能连接到服务器来修复或获取我为重定向所做的信息)

以下是我在 .htaccess 文件中添加的项目:

    RewriteCond %{HTTPS} !on [OR]
    RewriteCond %{HTTP_HOST} ^example\.com$
    RewriteCond %{HTTP_HOST] ^www\.example\.com$
    RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

以下是我的httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

我的 SSL 证书是在 httpd-ssl.conf 中配置的,因此我将 httpd-vhosts.conf 指向 VirtualHost *:80 下面是我的 httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

更新

以下是我在 .htaccess 中通过添加 [OR] 进行更新的内容:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

以下是我收到的日志:

strip per-dir prefix: D:/wamp64/www/example/ -> 
applying pattern '.*' to uri ''
RewriteCond: input='off' pattern='!on' => matched
rewrite '' -> 'https://www.example.com/'
explicitly forcing redirect with https://www.example.com/
escaping https://www.example.com/ for redirect
redirect to https://www.example.com/ [REDIRECT/301]

我在浏览器中再次尝试,但没有重定向。我也尝试在 Firefox 中调试,得到的主机是 example.com

这是我删除 [OR] 后得到的结果

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

日志:

RewriteCond: input='off' pattern='!on' => matched
RewriteCond: input='www.example.com' pattern='^example\\.com$' => not-matched

请告诉我我的重定向是否有效,因为我已经为此工作了几个月,现在却没有主意了(我希望不是因为我犯了愚蠢的错误……祈祷!)。请帮助我,提前谢谢!

答案1

我相信你实际上并不想要这种情况:

RewriteCond %{HTTP_HOST} ^www\.example\.com$

因为这会导致无限重定向循环,鉴于这也是.htaccess适用于该https://www版本的:

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

答案2

我认为是缺少空格字符。请更改此内容:

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

更改为:

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

您的日志文件条目证明http://www.example.com已成功重写为https://www.example.com/.他们没有证明任何关于http://example.com添加空格字符应该可以解决后者的问题。

答案3

您应该mod_rewrite在 Virtualhost 定义中使用类似这样的内容:

ServerName  www.example.com
ServerAlias example.com
Redirect permanent / https://www.example.com/

根据 Apache httpd 文档

当发现其他替代方案不尽如人意时,mod_rewrite 应被视为最后的手段。当有更简单的替代方案时使用它会导致配置混乱、脆弱且难以维护。

相关内容