You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

DirectAdmin启用SSL后出现重定向循环问题求助

解决DirectAdmin中SSL启用后.htaccess重定向循环问题

我之前也碰到过一模一样的问题,折腾了好一会儿才搞定,给你梳理几个关键排查点和解决办法:

1. 先确认443端口的虚拟主机配置是否完整

你只贴了80端口的配置,SSL启用后必须要有对应的443 VirtualHost,不然HTTPS请求可能无法正确处理,直接导致重定向循环。正常的443配置应该包含这些关键内容:

return (<VirtualHost 111.222.33.44:443>
  ServerName www.my-shop.net
  ServerAlias my-shop.net
  ServerAdmin webmaster@my-shop.net
  DocumentRoot /home/admin/domains/my-shop.net/public_html/application/public
  ScriptAlias /cgi-bin/ /home/admin/domains/my-shop.net/public_html/application/public/cgi-bin/
  SSLEngine on
  SSLCertificateFile /path/to/your/ssl-cert.crt
  SSLCertificateKeyFile /path/to/your/ssl-private.key
  SSLCertificateChainFile /path/to/your/ssl-chain.crt
  UseCanonicalName OFF
</VirtualHost>
)

要确保ServerNameServerAliasDocumentRoot和80端口的配置完全一致,证书文件路径也不能出错。

2. 修正.htaccess的Rewrite规则(核心解决点)

重定向循环90%的概率是因为你的RewriteRule没判断当前是否已经是HTTPS,导致每次跳转后又被规则重新定向。把你的规则改成下面这样:

RewriteEngine On

# 规则1:非HTTPS请求强制跳转到HTTPS的www域名
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.my-shop.net/$1 [L,R=301]

# 规则2:如果已经是www但非HTTPS,直接跳转
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

# 如果你不需要强制www,只需要HTTPS,用下面这两句就行
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

注意[L,R=301]里的L表示这是最后一条执行的规则,避免后续规则干扰;301是永久重定向,对SEO更友好。另外,DirectAdmin有时候会自动在.htaccess里添加跳转规则,记得检查有没有重复的强制跳转配置,重复规则肯定会导致循环。

3. 检查DirectAdmin的SSL全局设置

登录DirectAdmin后台,找到你域名的SSL管理页面,看看有没有勾选Force SSL Redirect或者类似的选项。如果已经勾选了,DirectAdmin会自动生成系统级的跳转规则,这时候你自己加的.htaccess规则就会和它冲突,直接引发循环。这种情况二选一即可:要么关掉DirectAdmin的强制跳转,用自己的.htaccess规则;要么保留系统设置,删掉你手动添加的RewriteRule。

4. 清除浏览器缓存再测试

有时候浏览器会缓存旧的重定向规则,哪怕你已经改好了配置,还是会出现循环。建议用无痕模式打开网站,或者手动清除浏览器的缓存、Cookie后再测试,避免缓存干扰排查。

内容的提问来源于stack exchange,提问作者mini

火山引擎 最新活动