【发布时间】:2016-09-25 16:29:41
【问题描述】:
我有这个代码通常用于在网站上强制使用 SSL:
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我从here得到的
我希望它仅适用于特定的子域。
例如,如果您要访问http://sub.domain.org,它应该重定向到https://sub.domain.org。
我有一种预感,我需要添加另一个 RewriteCond,它基本上说 被击中的域是 http://sub.domain.org,但我不知道如何编写这段代码.
我一直在研究其他 stackoverflow 问题,例如:
Force HTTPS and WWW for domain and only HTTPS for subdomains HTACESS
Force SSL/https using .htaccess and mod_rewrite
和 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]
有点颠倒了question/answer中的答案:
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} =reports.uksacb.org
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
但是我仍然无法理解如何正确地做到这一点。
如果有人能向我解释我做错了什么,我需要做些什么来让它正确,以及如何调试他们的重写条件和规则以确保它正常工作,我将非常感激。有时我认为我的浏览器正在缓存我编写的规则,而我的不同尝试没有任何影响!
我的整个.htaccess 看起来像这样:
选项 - 多视图
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 Right 会试一试,看看进展如何,谢谢!
-
如果您有一个有效的子域证书,该证书将通过扩展对主域有效,那么只需将所有域/子域设置为 TLS 保护。
标签: php apache .htaccess mod-rewrite ssl