web-dev-qa-db-ja.com

Wordpress + nginx無限リダイレクトループ

wordpressサイトで管理領域にアクセスするときに問題が発生します。

次のように入力した場合: http://www.beshan.com/wp-admin/

無限リダイレクトループが発生しますが、次のように入力すると:

http://www.beshan.com/wp-admin/index.php

できます

私のクライアントのサーバーはcentos linux + nginxです

nginx.conf:

user  www www;
worker_processes 8;
error_log  logs/nginx_error.log  crit;
#pid        /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process. 
worker_rlimit_nofile 51200;
events 
{
  use epoll;
  worker_connections 51200;
}

http 
{
  include       mime.types;
  default_type  application/octet-stream;
  #charset  gb2312;
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 8m;

  sendfile on;
  tcp_nopush     on;

  keepalive_timeout 60;

  tcp_nodelay on;
  server_tokens off;

  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 64k;
  fastcgi_buffers 4 64k;
  fastcgi_busy_buffers_size 128k;
  fastcgi_temp_file_write_size 128k;

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;

  #limit_zone  crawler  $binary_remote_addr  10m;

  server
  {
    listen       80;
    server_name  www.beshan.com;
    index index.html index.htm index.php;
    root  /usr/local/nginx/htdocs/beshan.com/www/;

    #limit_conn   crawler  20;    

    location / {
        index  index.php;
        # If file not found, redirect to Zend handling, we can remove the (if) here and go directly rewrite
        if (!-f $request_filename){
        rewrite ^/(.+)$ /index.php?$1& last;
        }
    }
    location ~* ^.+\.(js|ico|gif|jpg|jpeg|pdf|png|css)$ {
      access_log   off;
      expires      7d;
    }
    location ~ .*\.php?$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

#    location ~ .*\.(php|php5)?$
#    {      
#      #fastcgi_pass  unix:/tmp/php-cgi.sock;
#      fastcgi_pass  127.0.0.1:9000;
#      fastcgi_index index.php;
#      include fcgi.conf;
#    }
#    
#    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
#    {
#      expires      30d;
#    }
#
#    location ~ .*\.(js|css)?$
#    {
#      expires      7d;
#    }    

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for';
    access_log  logs/access.log  access;
  }
}

chrome開発者ツール->ネットワークで、エラーメッセージを表示する前に、302リダイレクト、25近くの多くのリダイレクトを確認できます。

Nginxで構成された何か悪いですか?どうすれば解決できますか?

6
Oterox

ここに問題があります:

        if (!-f $request_filename){
        rewrite ^/(.+)$ /index.php?$1& last;
        }

これは 最も一般的なnginxの設定ミス の1つです。

これらの3行を try_files

try_files $uri $uri/ /index.php;

nginxのWordPress wikiエントリ も参照してください。

(ところで、Apacheを使用していないので、.htaccessは何もしません。)

4
Michael Hampton

サイトが有効なフォルダーで、サイトの構成を終了し、マルチサイトリダイレクトルールを追加する必要があります。 Ubuntu 14.04の場合、パスは/ etc/nginx/sites-availableの下にあります

サーバーブロックに次のブロックを追加すると、無限のリダイレクトループを回避できるはずです。

#Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$Host$uri/ permanent;
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
1
Basil Abbas