Nginx - Wordpress 重定向循环

Nginx - Wordpress 重定向循环

我使用 nginx 作为 apache2 的前端。Apache2 将处理所有动态内容。

这是我的主文件,其中 nginx 作为 apache 的前端,并将所有动态页面转发到 apache2:

server {
    listen 80; 

    root /var/www/websites/main/htdocs; 
    index index.html index.php index.htm;

    server_name *removed*;

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

    location ~ \.php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:81;
    }

    location ~ /\.ht {
        deny all;
    }
}

不幸的是,这会导致 Wordpress 出现重定向循环。

当我使用以下配置时,网站可以正常加载,尽管 nginx 正在处理所有静态和动态内容,这与重点相悖。

server {
    listen 80; 

    root /var/www/websites/main/htdocs;
    index index.html index.php index.htm;

    server_name *removed*;

    location ~* ^.+\.(ico|jpg|jpeg|gif|png|css|txt|js|flv|swf|html|htm|eot|woff|ttf|svg)$
    {
        access_log off;
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location / {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:81;
    }

    location ~ /\.ht {
        deny all;
    }
}

使用 Chrome 开发者工具,我发现这是一个 301 重定向循环。我可以毫无问题地访问 wp-admin。

答案1

添加到你的 wordpress 主题 function.php ->

remove_filter('template_redirect', 'redirect_canonical');

答案2

我知道您发布问题已经有一段时间了,但如果您仍然遇到困难......

我遇到了和你一样的问题,并解决了这个问题这篇博文据我所知,您需要使用 ngx_http_upstream_module(文档这里). 在 nginx.conf 中,包含以下几行:

http {

[...]

upstream backend {
        ip_hash;
        server 127.0.0.1:8081; #or other IP-address:port config - you may add several
    }

[...]

  server {

  [...]

      location / {
            try_files $uri $uri/ /index.php;
            proxy_pass http://backend;
      }

  [...]

  } # END "server"

} # END "http"

答案3

我认为 wordpress 使用某种类型的 seo-friendly-path-style-urls 或重定向,所以你可以

index.php -> /nice-url -> index.php -> /nice-url 

由于您的 try_files - 阻止。

如果直接访问 /index.php 会发生什么?你的日志说明了什么?

你应该寻找一个 nginx-worpdress-receipt

答案4

尝试这个:(来源:http://wiki.nginx.org/WordPress

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

编辑:我还建议通过 FastCGI 使用 PHP,而不是通过 Apache。

相关内容