我有一个强制网站使用SSL的代码:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我从这里获取了以下内容:
我希望它只适用于特定的子域名。
例如,如果您访问http://sub.domain.org
,它应该重定向到https://sub.domain.org
。
我猜想我需要添加另一个RewriteCond
,基本上是说被访问的域名是否为http://sub.domain.org,但我不知道如何编写此代码。
我一直在查看其他stackoverflow问题,例如:
强制将主域名设置为HTTPS和WWW,将子域名仅设置为HTTPS HTACESS
使用.htaccess和mod_rewrite强制使用SSL / https
以及Apache文档:https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
我尝试了以下内容:
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} !^(reports\.)?uksacb\.org$ [NC]
RewriteRule ^.*$ https://%1%{REQUEST_URI} [R,L]
在这个问题/答案中,回答有些颠倒了:
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} =reports.uksacb.org
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
然而,我仍然无法理解如何正确地执行它。
如果有人能够向我解释我做错了什么,我需要做什么才能做到正确,并且如何调试他们的重写条件和规则,以确保它正常工作,我将非常感激。有时我认为我的浏览器正在缓存我编写的规则,我的不同尝试没有产生任何影响!
我的整个.htaccess文件看起来像这样:
选项-MultiViews
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Force SSL
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{HTTP_HOST} =reports.uksacb.org
应该可以工作。清除浏览器缓存并在第二条规则中使用该条件进行重新测试。 - anubhava