将单页https重写为http Nginx

时间:2011-02-20 11:37:21

标签: php ssl joomla nginx rewrite

我想将“https://www.example.com”和“https://example.com”重写为“http://www.example.com”或“http://example.com”分别'。我只想写网站的特定部分而不是任何子文件夹或php相关页面。我该怎么做?

2 个答案:

答案 0 :(得分:7)

我在另一个方向上使用它(没有在这个方向上测试但应该工作)。

if ( $scheme = https )
{
  rewrite ^ http://$host$uri;
}

编辑:限制位置并结束不要尝试重写更多:

location / {
  if ( $scheme = https )
  {
    rewrite ^ http://$host$uri last;
  }
}

答案 1 :(得分:1)

我使用了类似以下的内容,避免使用IfIsEvil并使用return代替rewrite。然而它失败了DRY,这让我感到困扰。欢迎提出建议。

server {
    listen 80;
    server_name .example.com;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php5-fpm.sock ;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen              443 ssl;
    server_name         .example.com;
    ssl_certificate     /etc/ssl/certs/example.com.cert;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    index index.html index.htm index.php;

    # Rewrite only / to http
    location = / {
        return 301 http://$server_name$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php5-fpm.sock ;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

另见