【问题标题】:How get rid from redirect while using NGINX使用 NGINX 时如何摆脱重定向
【发布时间】:2019-09-13 16:51:41
【问题描述】:

我一直使用 Apache 作为我的 Web 服务器,但我现在因为其他原因不得不使用 NGINX。它现在在 AWS Linux AMI 上运行。 这是我第一次玩,我设法让一个空白配置工作,但是当我添加我从 .htaccess 转换的规则时,我不断让网站进入重定向。不确定它是否是我的配置。另外,我不确定你是否需要一个单独的 443?

server {
  listen 80;
  server_name sitename.co.uk www.sitename.co.uk;
  root /var/www/html/Project;

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

    if (!-e $request_filename){
      rewrite ^/([^\.]+)$ /$1.php break;
    }
    if ($http_host ~* "^sitename\.co.uk"){
      rewrite ^(.*)$ https://sitename.co.uk/$1 redirect;
    }
    if (!-e $request_filename){
      rewrite ^(.*)$ /index.php break;
    }
    if (!-e $request_filename){
      rewrite ^(.*)$ /index.php break;
    }
  }

access_log /var/log/nginx/sitename.access.log;
error_log /var/log/nginx/sitename.co.uk.error.log;
}

任何帮助都会很棒。

【问题讨论】:

  • 我怀疑这是因为第二个 if 块 - 重写和重定向。这看起来像是用于从 http 重定向到 https,并且在该上下文中不起作用。

标签: amazon-web-services web-services nginx nginx-config


【解决方案1】:

这可能是由于这部分导致了无限循环:

if ($http_host ~* "^sitename\.co.uk"){
  rewrite ^(.*)$ https://sitename.co.uk/$1 redirect;
}

这似乎是为了将 http 重定向到 https。在 nginx 中实现这一点的正确方法是使用两个单独的服务器块。一个监听 443(https) 并配置了 ssl,另一个监听 80(http),内容如下所示:

server {
 listen 80;
 server_name sitename.co.uk www.sitename.co.uk;
 return 301 https://sitename.co.uk$request_uri;
}

网上其他地方有很多关于 nginx 配置的教程,所以我不再赘述。希望这有助于解决您的紧迫问题。 :)

【讨论】:

  • 谢谢你,我试试看。由于 Cloudflare 处理我的 HTTPS 和 SSL,我不需要编写 443 块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多