尝试几次后,网站重定向出现错误,我设法执行网站重定向,但它在 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 应被视为最后的手段。当有更简单的替代方案时使用它会导致配置混乱、脆弱且难以维护。