«

http站点使用php或nginx配置301方式跳转到https

时间:2024-2-19 17:25     作者:韩俊     分类: Linux


首先说一下http和https:

http定义了客户端(浏览器)与服务器之间的通信规则,端口号是80,大部分客户端指的是我们平时上网的浏览器,当然有很多中断例如手机APP、嵌入式软件也可能采用http和服务器通信,这种协议在传输的时候是明文的,也就是在通信过程中传输的数据在线路的每个节点(例如网关,路由器)都可以被劫持到,所以安全性较低。而https即http下加入SSL层加密,端口号是443,传输数据无法被劫持到。

对于安全性较高的站点(金融、银行、电子商务等)一般都采用https,目前越来越多的站点都使用了https,但是很多用户输入的时候都是直接输入网址,默认浏览器作为http来请求,这样就需要在服务器端做一个跳转到https站点,在服务器端跳转有301和302两种方式,这里的301和302指的是http请求状态码,对用户来讲没什么区别,但是对于搜索引擎关系重大,301是永久重定向而302则被认为是临时的,所以应该采用301的方式,做301跳转一般又有两种方式:1.使用程序跳转2.使用web服务器配置跳转。

以PHP程序为例可以在入口文件或者公共文件中使用

$scheme = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : '';

if (($scheme === 'http')) {
    header('HTTP/1.1 301 Moved Permanently');
    header('Location:https:' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
    exit;
}

这样就可以实现全站301跳转了,$_SERVER['REQUEST_URI'] 表示保留原来url上的参数。

另外一种方式就是使用web服务器配置进行跳转,以Nginx为例,在80端口的虚拟主机中使用:

return 301 https://$server_name$request_uri;

例如本站的配置:

server {
  listen 80;
  server_name www.maopiaopiao.com;
  root /home/yhm/webroot;
  return 301 https://$server_name$request_uri;
  error_page 500 502 503 504 404 /404.php;
  location / {
    index index.php index.html;
  }
  include /home/yhm/webroot/.htaccess;
  location ~ ^(?:(?<!\.php).)+\.php($|/.*) {
    try_files $uri = 404;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    include fastcgi_params;
  }
}

这样就可以实现和上述程序一样的301跳转,有条件的建议使用web服务器做跳转,一个是不用解析应用程序代码,再就是通过程序跳转的方式虽然先发送了301状态码信息,但是Location方式是302,有的客户端会识别成302跳转。

标签: linux nginx

热门推荐