302用nginx和WordPressredirect循环

我一直在Serverfault寻找几个小时试图解决这个问题,但我找不到解决scheme。 会发生什么是:

我有一个使用wget在我的网站302redirect循环,但不使用浏览器。 在我的nginxconfiguration中,我只有两个301redirect,而不是302 。 我试图禁用WordPress的所有插件没有运气。

什么可能导致这个问题? 下面是我的nginxconfiguration。 wget一些例子:

 wget elbauldelprogramador.com --2014-10-30 13:10:24-- http://elbauldelprogramador.com/ Resolving elbauldelprogramador.com (elbauldelprogramador.com)... Connecting to elbauldelprogramador.com (elbauldelprogramador.com)||:80... connected. HTTP request sent, awaiting response... 302 Moved Temporarily Location: 404 [following] --2014-10-30 13:10:25-- http://elbauldelprogramador.com/404 Reusing existing connection to elbauldelprogramador.com:80. HTTP request sent, awaiting response... 302 Moved Temporarily Location: 404 [following] --2014-10-30 13:10:25-- http://elbauldelprogramador.com/404 Reusing existing connection to elbauldelprogramador.com:80. [...] HTTP request sent, awaiting response... 302 Moved Temporarily Location: 404 [following] 20 redirections exceeded. 

和服务器中的日志:

 S.IP - - [30/Oct/2014:13:11:22 +0100] "GET /404 HTTP/1.1" 302 154 "-" "Wget/1.15 (linux-gnu)" S.IP - - [30/Oct/2014:13:11:22 +0100] "GET /404 HTTP/1.1" 302 154 "-" "Wget/1.15 (linux-gnu)" S.IP - - [30/Oct/2014:13:11:22 +0100] "GET /404 HTTP/1.1" 302 154 "-" "Wget/1.15 (linux-gnu)" 

Nginxconfiguration

 server { #listen 127.0.0.1:81; listen 80; server_name www.example.com; return 301 $scheme://example.com$request_uri; } server { # listen 127.0.0.1:81; listen 80; server_name example.com port_in_redirect off; server_tokens off; autoindex off; root /path; ## Page Speed Module ## include global/pagespeed.conf; ## Fastcgi cache start ## set $no_cache 0; # POST requests and urls with a query string should always go to PHP if ($request_method = POST) { set $no_cache 1; } if ($query_string != "") { set $no_cache 1; } # Don't cache uris containing the following segments if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $no_cache 1; } # Don't use the cache for logged in users or recent commenters if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") { set $no_cache 1; } # Deliver 404 instead of 403 "Forbidden" error_page 403 = 404; include global/restrictions.conf; include global/caching.conf; # Additional rules go here. access_log log/access.log; error_log log/error.log warn; rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last; location = /p/guia-de-desarrollo-android.html { rewrite /p/guia-de-desarrollo-android.html http://example.com/curso-programacion-android/ permanent; } location = /p/bases-de-datos.html { rewrite /p/bases-de-datos.html http://example.com/bases-de-datos/ permanent; } location = /feeds/posts/default { rewrite /feeds/posts/default http://example.com/feed permanent; } location = /p/guias-gratuitas.html { rewrite /p/guias-gratuitas.html http://example.com/manuales-gratuitos/ permanent; } # Only include one of the files below. include global/wordpress.conf; include global/security.conf; } 

包括global / wordpress.conf;

 #WordPress single blog rules. # Designed to be included in any server {} block. #A little something from the Search Overload blog entry location = /search { limit_req zone=wpsearch burst=3 nodelay; try_files $uri /index.php; } location / { try_files $uri $uri/ /index.php; } # Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } # Pass all .php files onto a php-fpm/php-fcgi server. location ~ \.php$ { # Zero-day exploit defense. # http://forum.nginx.org/read.php?2,88845,page=3 # Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi. # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine. And then cross your fingers that you won't get hacked. try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass php; ## # Fastcgi cache ## fastcgi_cache_bypass $no_cache; fastcgi_no_cache $no_cache; fastcgi_cache microcache; fastcgi_cache_valid 60m; } 

提前致谢。

你的nginxconfiguration有错误:

  error_page 403 = 404; 

这导致nginx尝试redirect到名为“404”的文档,这正是发生的事情。

这应该写成:

  error_page 403 =404; 

或者更好的是,它不应该在场。 发送明显错误的错误代码是混淆人(如自己)的好方法。