从 Apache 到 Nginx:错误 310,重定向过多

从 Apache 到 Nginx:错误 310,重定向过多

我正在移动一个 Wordpress 博客从基于 Apache 的 Web 服务器到基于 Nginx 的 Web 服务器。我认为步骤很简单:

  • scp 源 WordPress 文件夹(本例中为 /var/www/example.com),将其传输到远程 Web 服务器上同名文件夹。这样就没问题了。

  • 源 WordPress 数据库的 mysqldump。这样没问题。

  • 在 nginx 网络服务器上,我创建了一个数据库(与源数据库同名,只是为了保持所有内容相同)。

  • 我设置了一个默认的 WP 博客,看看此时一切是否正常。我创建了一个正确的
    /etc/nginx/sites-available/example.com 配置文件(当然,还链接到 sites-enabled)。该
    配置文件指向不同的文件夹(/var/www/exampletemp)

  • 修改我的 Windows 主机文件以便在我感兴趣的域上测试新博客。example.com 上的博客显示正常,当然是默认的 WP 博客,但具有正确的 URL。

  • 然后是关键步骤。首先,我编辑 /etc/nginx/sites-available/example.com,使其现在指向真正的备份文件夹 (/var/www/example.com) ->(只需更改根位置和 fastcgi 指令)。

  • 然后我创建另一个数据库,在这个新数据库上恢复源数据库,编辑 /var/www/example.com 上的 wp-config.php 文件以防万一缺少某些内容,然后重新启动 nginx。

我能得到什么?

A华丽的,美丽的“错误 310:重定向次数过多”:(

我可以在 www.example.com/wp-login.php 上看到登录页面,但我的源用户不起作用,我无法访问 WordPress 仪表板。例如,我修改了 phpMyadmin 中的管理员帐户,设置了新密码并选择了 MD5 加密,虽然在我从 Apache 移到 Apache 或从 Nginx 移到 Nginx 时这些方法都有效,但这次却不行。

我真的不明白为什么会出现“重定向次数过多”的错误。我尝试禁用所有插件(将 /wp-content/plugins 重命名为 /wp-content/oldplugins,或使用 SQL 查询禁用所有插件),但还是没用。

抱歉,问题太长了。希望我已经表达清楚了...

编辑:这是 nginx 配置文件,以防万一:)

server {

            listen   80;
            server_name  www.example.com;
            rewrite ^/(.*) http://example.com/$1 permanent;

           }


server {
       listen   80;
       access_log  /var/www/example.com/log/access.log;
       error_log      /var/www/example.com/log/error.log info;
       server_name     example.com;
       root /var/www/example.com;

       location / {
          index index.php;
          # if the requested file exists, return it immediately
          if (-f $request_filename) {
                  break;
          }

        # all other requests go to WordPress
        if (!-e $request_filename) {
           rewrite . /index.php last;
           }
      }

      ## Images and static content is treated different
      location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
               access_log        off;
               expires           30d;
               root /var/www/example.com;
      }


## Parse all .php file in the /var/www directory
    location ~ .php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass   backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  HTTP_HOST        example.com;
        fastcgi_param  QUERY_STRING     $query_string;
        fastcgi_param  REQUEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
        fastcgi_intercept_errors        on;
        fastcgi_ignore_client_abort     on;
        fastcgi_read_timeout 180;

    }


    ## Disable viewing .htaccess & .htpassword
    location ~ /\.ht {
        deny  all;
    }
}

我正在思考我的问题的另一个答案:Apache Web 服务器上的源 WP 文件夹具有apache:apache用户:组,在将该文件夹“scping”到我的新 Nginx Web 服务器后,该用户和该组不再有效。我chown -R www-data:www-data对新的 WP 文件夹进行了适当的修改,但是……这可能是答案的提示吗?

答案1

尝试:

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

答案2

nginx 是否将正确的“Host”标头传递给 FastCGI 服务器?Wordpress 检查此标头,如果它与 DB 中的设置不相等,则执行重定向。看来您应该检查/etc/nginx/fastcgi_params并设置类似的东西fastcgi_param HTTP_HOST example.com;

相关内容