将单页 https 重写为 http Nginx

Posted

技术标签:

【中文标题】将单页 https 重写为 http Nginx【英文标题】:Rewrite single page https to http Nginx 【发布时间】:2011-06-30 17:12:35 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

if ( $scheme = https )

  rewrite ^ http://$host$uri;

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

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

【讨论】:

我需要它只在人们在 url 而不是任何其他页面时重写。该指令重写整个网站的网址。 这种做法太糟糕了...wiki.nginx.org/Pitfalls 和wiki.nginx.org/IfIsEvil @Ownatik:来自您引用的页面:“在location 上下文中,可以在if 内完成的唯一100% 安全的事情是:return ...;rewrite ... last;”。这里是第二种情况,你有更好的解决方案吗?【参考方案2】:

我使用了类似于以下内容的东西,它避免了 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;
    

另见

nginx http location docs related nginx https to http answer

【讨论】:

以上是关于将单页 https 重写为 http Nginx的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 重定向 Nginx 重写

ini 在Nginx中将http重写为https

xml url在iis7x及更高版本上将http重写为https重定向

IIS URL将Http重写为Https,排除单个URL

将规则重写为IIS以将HTTPS重定向到HTTP会导致null HttpContext.Request.ContentType

Nginx Rewrite