Wordpress导致"此网页有一个重定向循环"错误远程

Ale*_*lex 6 php wordpress redirect

我有一个Wordpress站点在开发(at mysite.dev)中运行良好,但是当我将它部署到我的远程服务器(mysite.com)时,它会抛出' 此网页有一个重定向循环 '错误.

我可以在加载栏中看到浏览器一次又一次地尝试www.mysite.com然后是mysite.com然后是www.mysite.com,但是我不确定这是否是相关的.

如果我的Wordpress数据库配置不正确,我得到错误建立数据库连接消息,但是当一切设置正确时,它会在这个重定向循环事件中中断.

我已经更改了数据库(siteurl)中的字段以反映远程设置(http://mysite.com/wordpress).

注:我的WordPress的文件存储在一个文件夹,名为在wordpress我的根目录下,除了wp-config.php,index.php.htaccess.

有任何想法吗?

.htaccess内容:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
Run Code Online (Sandbox Code Playgroud)

index.php文件:

<?php
/**
 * @package WordPress
 */
define('WP_USE_THEMES', true);

require('./wordpress/wp-blog-header.php');
?>
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

我的托管服务器设置强制mysite.com到www.mysite.com,这导致了问题.我关闭了这个设置,现在一切正常,我仍然想知道如何让这个设置开启,但是!


Gfr*_*a54 5

我遇到了完全相同的问题(迁移到新服务器后出现了重定向循环)。

但这不是配置值siteurl和home的问题,也不是.htaccess文件的问题。我尝试了所有这些。而且添加到URL中的'www'也不是问题

经过一些研究,我发现循环是由对redirect_canonical函数(在wp-inclue / canonical.php中)的无限调用引起的。但这不是来自wordpress的错误。当您访问根URL时,某些PHP配置会以“错误的方式”设置$ _SERVER ['REQUEST_URI']。示例:在我的服务器上,当我转到http://example.com/时,$ _ SERVER ['REQUEST_URI']设置为'/index.php'而不是'/'这对于redirect_canonical造成了困扰,因为此功能始终尝试将其重定向到页面已知的“更好”网址。网站根目录的最佳url是'/'。在我的服务器上,每次redirect_canonical尝试重定向到'/'都会失败,然后再次尝试直到找到无限重定向循环。

要更正此错误,您可以修改服务器配置-我不愿意过分地知道如何做,但是我知道有可能-或如果您不能更改它,只需在自定义插件中添加以下代码即可:

/**
 * avoid redirection loop in redirect_canonical if REQUEST_URI 
 * contains '/index.php' 
 **/

/* remove the action set in the hook 'template_redirect' by wordpress */
remove_action('template_redirect', 'redirect_canonical');

/* set a custom action in the hook 'template_redirect' to check REQUEST_URI value */
add_action('template_redirect', 'correct_redirect_canonical');

/* Function to correct the behaviour of redirect_canonical */
function correct_redirect_canonical(){
    if(strstr($_SERVER['REQUEST_URI'],'/index.php')===false){
        redirect_canonical();
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 !