Nginx

Wordpress + nginx 無限重定向循環

  • May 20, 2021

我在使用 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 中配置了一些不好的東西嗎?我該如何解決?

這是問題所在:

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

這是最常見的 nginx 錯誤配置之一。

將這三行替換為try_files

try_files $uri $uri/ /index.php;

另請參閱nginx 上的 WordPress wiki 條目

(順便說一句,您的 .htaccess 什麼都不做,因為您沒有使用 Apache。)

在啟用站點的文件夾中,您需要結束站點配置並添加多站點重定向規則。對於 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;
}

引用自:https://serverfault.com/questions/531535