php我需要始终保持安全,所以我发现了这个:
<?php if($_SERVER['SERVER_PORT'] != '443') { header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit(); }?>
将页面重定向为使用https。
但当他们从该安全页面浏览到y.php时,我需要返回http。
我用过:
<?php if($_SERVER['SERVER_PORT'] != '80') { header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit(); }?>
编辑生病解释一个liitle更抱歉。
我有一个wordpress网站,我需要1个页面强制使用HTTPS,而其他所有网站都不使用HTTP。
页面本身称为/ help,wordpress安装使用永久链接。
如果用户要浏览HTTP上的任何其他页面,例如/ hello,则需要强制它们返回http
希望这会有所帮助
答案 0 :(得分:2)
我想我理解你的要求,这将确保/ help始终是https,并且所有其他路径都在http protocal下
<强> PHP 强>
$request = strtolower(trim($_SERVER['REQUEST_URI']));
if (0 === strpos($request, '/help')) { // liberal matches
//if (preg_match('/^\/help\/?$', $request)) { //conservative
if ($_SERVER['HTTPS'] != 'on') {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit;
}
} else if ($_SERVER['HTTPS'] == 'on') {
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
}
.htaccess *(启用mod_rewrite)*
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/help\/? #liberal matches /help /helped /helper
#RewriteCond %{REQUEST_URI} ^/help\/?$ #conservative matches /help and /help/
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/help #liberal matches /help /helped /helper
#RewriteCond %{REQUEST_URI} !^/help\/?$ #conservative matches /help and /help/
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]
答案 1 :(得分:0)
使用下面的函数检查当前页面是否为SSL,它在一个广受欢迎的社区php库中使用:
/**
* Check if the current page is SSL
*/
function securepages_is_secure() {
return (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? TRUE : FALSE;
}
然后在页面没有表单时重定向您的用户,securepages_is_secure()返回TRUE。
答案 2 :(得分:0)
此htaccess解决方案是否有帮助:
<Location /form.php> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </Location>希望有所帮助