如何修复htaccess RewriteRule对RewriteCond的引用?修复CPANEL AutoSSL让我们加密

时间:2018-05-10 04:39:38

标签: .htaccess mod-rewrite cpanel lets-encrypt

带有AutoSSL的CPANEL(让我们加密)将自动RewriteCond添加到htaccess,因为.well-已知文件夹并且每隔X分钟不断更新htaccess文件,因此您无法删除“众所周知”的行。但是通过这种方法,他们打破了RewriteRule对RewriteCond的反向引用。

# www to non-www generic
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

上面的示例不能用作旁观者,因为%1引用了最后一个RewriteCond,而不是我们用regexp过滤主机的第一个。

1 个答案:

答案 0 :(得分:0)

使用变量

修复了通用www到非www的问题
# www to non-www (fixed to work with CPANEL - AutoSSL)
SetEnvIf Host "^www\.(.*)$" my_domain=$1
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/[0-9a-zA-Z_-]+$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)$ https://%{ENV:my_domain}/$1 [R=301,L]

要绕过这个问题使用变量,它不漂亮但是有效!