我有一般用于在网站上强制使用SSL的代码:
if ($stmt = $mysqli->prepare("INSERT INTO users (`username`, `address`, `lat`, `lng`) VALUES (?,?,?,?)")) {
$stmt->bind_param('ssii', $username, $address, $lat, $lng);
// Execute the prepared query.
if (! $stmt->execute()) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
}
else {
die('prepare() failed: ' . htmlspecialchars($database->error));
}
$stmt->close();
我从here获得了
我希望仅适用于特定的子域。
例如,如果您要访问RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
,则应重定向到http://sub.domain.org
。
我有预感,我需要添加另一个https://sub.domain.org
,其中基本上说是被点击的域名是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
在此question/answer中排除了答案:
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]
看起来像这样:
选项-MultiViews
.htaccess
答案 0 :(得分:11)
为避免使用我曾经使用的域名或子域名,请使用以下代码:
# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我更喜欢没有WWW。
%{HTTPS} 如果请求是通过SSL提供的,则设置为on。
%{HTTP_HOST} 协议(http://或https://)与请求(/example-file.txt)之间的所有内容。
%{REQUEST_URI} 服务器地址之后的所有内容 - 例如,对http://example.com/my/example-file.txt的请求将此值设置为我的/ example-file.txt。
%{HTTP:X-Forwarded-Proto} 请求网址时使用的协议 - 设置为http或https。
我希望它对任何人都有用。
答案 1 :(得分:1)
为了进行调试,我使用了一个我找到http://martinmelin.se/rewrite-rule-tester/
的网站使用您提供的规则
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我在
收到错误RewriteCond %{HTTPS} !=on
这可能适合你
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]
在https://www.sslshopper.com/apache-redirect-http-to-https.html
找到上述示例