Wordpress wp-admin或wp-login.php上的重定向循环

Wordpress wp-admin或wp-login.php上的重定向循环,wordpress,redirect,infinite-loop,Wordpress,Redirect,Infinite Loop,我使用MAMP在本地创建了一个快速WordPress站点,然后将其签入SVN repo。然后我将它签出到我的开发服务器上 除了从Interconnect运行脚本以更新服务器上数据库中站点的URL之外,我没有做任何更改 最初,我得到一个500服务器错误。检查日志,我发现这个“SoftException”是因为index.php是按组可写的-权限是664。没问题-将权限快速更改为644可以解决此问题。所以现在前线开始工作了 然而,奇怪的是,网站的管理端没有工作。它只是在所有浏览器中产生了一个无休止的

我使用MAMP在本地创建了一个快速WordPress站点,然后将其签入SVN repo。然后我将它签出到我的开发服务器上

除了从Interconnect运行脚本以更新服务器上数据库中站点的URL之外,我没有做任何更改

最初,我得到一个500服务器错误。检查日志,我发现这个“SoftException”是因为
index.php
是按组可写的-权限是664。没问题-将权限快速更改为644可以解决此问题。所以现在前线开始工作了

然而,奇怪的是,网站的管理端没有工作。它只是在所有浏览器中产生了一个无休止的重定向循环

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.
自本地开发版本以来,没有任何更改。htaccess文件只是一个标准的WordPress文件。没什么奇怪的。。。在当地仍然运作良好


那么到底发生了什么呢?

检查
wp login.php
的权限发现,它们也被设置为664,这与导致
index.php
失败并导致500服务器错误的权限相同

我将
wp login.php
的权限更改为644,然后显示WordPress登录页面

但在登录时,会出现另一个重定向循环。因此,再次查看
/wp admin/index.php
,权限是664而不是644

修复这些问题会导致接下来的文件出现问题-仪表板一团糟。从664改为644,一个接一个地纠正了问题(/wp admin/load-scripts.php,/wp admin/load styles.php)

因此,很明显,递归更改权限是解决问题的唯一方法

我的UNIX并不完全是一流的,但这似乎已经奏效(从MacOSX终端运行)。我从这个WP安装的根目录运行它

find . -type f -perm 664 -print -exec chmod 644 {} \;
可能有更好的命令,但我理解这意味着“查找所有具有664权限的文件,并将其更改为644”


它解决了我的问题。

如果您的Web服务器是nginx,您可能需要检查nginx的配置文件。如果有

if (!-f $request_filename){
    rewrite ^/(.+)$ /index.php?$1& last;
}
将这些线路更换为

try_files $uri $uri/ /index.php?$args;

另请参见,

出于任何原因/wp admin/path会导致重定向循环,但/wp admin/index.php不会。因此,我们可以使用.htaccess将/wp admin/path重定向到/wp admin/index.php,方法是在.htaccess文件的“RewriteBase/”行之后添加以下行,如下所示:

RewriteBase /
RewriteRule  /wp-admin/ /wp-admin/index\.php [L,P]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule  /wp-admin/ /wp-admin/index\.php [L,P]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
对我来说就是这样。 您最终的.htaccess可能如下所示:

RewriteBase /
RewriteRule  /wp-admin/ /wp-admin/index\.php [L,P]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule  /wp-admin/ /wp-admin/index\.php [L,P]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写基/
重写规则/wp admin//wp admin/index\.php[L,P]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

我不得不刷新我的重定向。 由于无法访问管理员,我将其添加到functions.php文件的顶部:

define('WP_SITEURL', 'https://www.example.com');
define('WP_HOME', 'https://www.example.com');
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if(isset($_SERVER['HTTP_CF_VISITOR']) && strpos($_SERVER['HTTP_CF_VISITOR'], 'https')){
  $_SERVER['HTTPS']='on';
}
flush_rewrite_rules();
出口

保存并刷新我的网站。 然后从functions.php文件中删除代码,然后再次刷新。 那是为了我

我也认为这可能是一个很好的措施,以重新保存您的永久链接


另外,我想主要的问题来自我的登录主题,因为它被重定向到/login。

我的问题是硬盘已经满了。尝试登录wordpress管理面板会将我重定向到wp-login.php。当我删除一些文件时,我可以再次登录

以删除这些行

define('DOMAIN_CURRENT_SITE', 'www.sitename.de');

define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
应该从
wp config.php
执行此任务


当我试图在我的WP站点中发布时,我得到的是DoS页面,这些行对于多行文件来说是不必要的。我发现将function.php文件中的权限更改为600可以解决这个问题,还可以在该文件中添加一个脚本片段。这是一个WP帮助页面。我以一种迂回的方式进入了出版界。当我试图打开编辑器时,仍然有DoS

在“站点启用”文件夹中,您需要编辑站点的配置并添加多站点重定向规则。对于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;
}

如果您有nginx,那么还要检查索引配置。至于我,我有一个问题:我设置了以下内容:

server {
    server_name _;
    root /var/www/html;
    index /index.php;
}

如您所见,我用斜杠设置了index.php,这意味着所有重写请求都将进入文档根中的index.php。对于WP来说,这是错误的,因为WP admin目录有自己的索引。php

上面的答案让我非常接近。在我们的特定案例中,有人在某个时候向站点根目录和admin文件夹中的htaccess文件添加了一些规则,以阻止来自任何地方的流量,除了一些白名单上的IP(当尝试访问wp admin时)

例如:

<Files wp-login.php>
   order deny,allow
   Deny from all

   # Allow from this IP address
  allow from 123.45.67.89
</Files>

命令拒绝,允许
全盘否定
#允许从这个IP地址
从123.45.67.89开始允许

将我们的IP添加到两个文件的白名单中解决了这个问题。

我遇到了一个类似的问题,这是因为恢复了使用WP Migrate db创建的db脚本。该脚本在“##DEV URL####”中有合并标记,在mysql上运行脚本并将wp-config.php指向正确的数据库之前,我需要修复这些标记。

对于nginx config,我最初只有这一行,并且遇到了相同的重定向问题:

location / {
    try_files   $uri /index.php$is_args$args;
}
添加此项后,一切正常:

location /wp-admin/ {
    index index.php;
    try_files $uri $uri/ /index.php$args;
}

在从其他服务器恢复备份后,我遇到了同样的问题,我用这种方法解决了这个问题

  chown -R www-data:www-data          /var/www
  chmod -R g+rwx                     /var/www

/var/www
存储网站文件的位置,根据您的配置将其替换为合适的路径,例如
/usr/share/nginx/www
如果您使用的是Cloudflare,您可能希望尝试将其添加到wp-config.php文件的顶部:

define('WP_SITEURL', 'https://www.example.com');
define('WP_HOME', 'https://www.example.com');
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if(isset($_SERVER['HTTP_CF_VISITOR']) && strpos($_SERVER['HTTP_CF_VISITOR'], 'https')){
  $_SERVER['HTTPS']='on';
}
必须将其添加到wp-config.php文件的顶部,否则将