Wordpress nginx 重定向循环

Posted

技术标签:

【中文标题】Wordpress nginx 重定向循环【英文标题】:Wordpress nginx redirect loop 【发布时间】:2013-11-27 14:13:27 【问题描述】:

所以,昨天我有一个问题,如何在“/root”目录中安装 wordpress。我在那个方面不是很成功,我放弃了那个。

所以,现在 wordpress 位于“/var/www/wordpress”(所以它在单独的文件夹下)文件夹下(我使用 Ubuntu 12.04 LTS,如果重要的话)。

我的问题是,在我配置完所有内容之后(那里的一切都像一个魅力一样工作),我被重定向到管理面板页面。在我尝试访问博客之前,一切正常。

我的博客的 URL 地址是:“blog.mysite.com”。这就是我使用 nginx 的原因,因为我在一台服务器上有两个不同的应用程序(和环境),我需要区分它们。

所以,事实是:blog.mysite.com/wp-admin (/wp-login.php) 工作正常,但是当我访问首页时:blog.mysite.com,它一直告诉我有一个无限的重定向循环(根据nginx访问日志文件进行301重定向)。

在管理面板中,我将“WordPress 地址 (URL)”和“站点地址 (URL)”都设置为:“http://blog.mysite.com”。将它们中的任何一个修改为其他内容,例如:“http://blog.mysite.com/wordpress”根本没有帮助!

“.htaccess”文件是空的,但我使用的是默认永久链接,所以应该不是问题(不过,我不确定)。

nginx 和 apache2 根指令都指向“/var/www/wordpress”。 静态文件(css、js)正在工作,如果重要的话。

我该如何解决这个问题?任何帮助深表感谢!

提前谢谢你!

【问题讨论】:

你发现了吗? @ark 你好。是的。事实证明,我们的 WP 安装有问题,所以这毕竟不是 nginx 问题 :( 如果你有类似的东西,请尝试在现有博客旁边重新安装或安装一个干净的博客,看看它是否在你之前有效开始接触 nginx。 其他解决方案的相同问题:wordpress.stackexchange.com/a/220896/127528 【参考方案1】:

过去我从 Apache 切换到 Nginx 时遇到了很多问题,当我清除 Apache 时都解决了,这在某种程度上干扰了 Nginx 并导致每个服务器出现问题。根据 Nginx 和 Wordpress 指南,这是我对 Nginx 的 wordpress 配置:

server 
    listen 80;
    server_name blog.mysite.com;

    root /var/www/wordpress;
    index index.php;

    charset utf-8;

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

    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;
    

    location ~ \.php$ 
        try_files $uri /index.php;

      fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # CHANGE THE LINE ABOVE IF NEEDED
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    

切换服务器时,我什至不需要在管理面板中进行任何更改,它运行良好。

【讨论】:

我的 VPS 上的所有东西:PHP(php5、php5-mysql、libs)、Apache2 - 都是全新安装的。它们已预先安装在 VPS 上,但我清除了它们并重新安装。所以,我显然不明白那里发生了什么以及为什么首先会发生这种重定向(考虑到管理面板工作完美的事实)但是,非常感谢!顺便说一句,我不使用“fastcgi”指令,我只是将它代理传递给 Apache:proxy_pass 127.0.0.1:8081(我自己定义了端口)【参考方案2】:

终于找到了解决办法:

http://www.violato.net/blog/php/88-wordpress-did-infinite-301-redirect-loop

希望这能帮助其他和我有同样问题的人。

谢谢大家。

【讨论】:

这不再加载。如果您有解决方案,您能否编辑您的答案并直接添加它们?谢谢 此处包含链接大纲的 Emile 回复。格式不佳,但如果它被编辑,请将以下内容添加到主题的 functions.php 文件中:remove_filter('template_redirect', 'redirect_canonical');【参考方案3】:

不是最漂亮的修复,但删除主题 functions.php 文件中的重定向过滤器对我有用。

remove_filter('template_redirect', 'redirect_canonical');

来自OP's answer中提供的链接:Wordpress did infinite 301 redirect loop

【讨论】:

天哪。 40 小时后,我终于有了一个答案,这是一条该死的台词。 欢迎来到 wordpress 修修补补! 那是天才。花了半天时间试图通过 nginx 日志弄清楚。 同样在这里浪费了一整天,这只是一行。哦,伙计,当这种情况发生时,我讨厌 wordpress【参考方案4】:

在我的例子中,重定向循环只影响 wp-admin 页面,所以我在行首添加了

if (is_admin) remove_filter('template_redirect', 'redirect_canonical');

并且仍然有效,加上重定向规范继续在前端完成它的工作!

我希望这对其他人有帮助!

【讨论】:

【参考方案5】:

我在使用 Nginx 作为 Apache 的反向代理时遇到了类似的问题。

几个小时后,我发现这是由 Nginx 将 $_SERVER["REQUEST_URI"] 设置为 index.php 而不是实际的 url 而 Wordpress 试图通过重定向到没有 index.php 的 url 来删除 index.php wp-includes/canonical.php.

我的解决方案是使用这样的东西,

proxy_pass http://111.111.111.111:8080$request_uri;

所以添加$request_uri 修复了它。

【讨论】:

【参考方案6】:

我遇到这个问题是因为我使用 nginx 转发请求,但 nginx 没有保留 HOST 标头。

在我的 location 块下添加这些值后,事情就开始按预期工作了。

    # Set proxy headers for the passthrough
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # Let the Set-Cookie header through.
    proxy_pass_header Set-Cookie;

【讨论】:

以上是关于Wordpress nginx 重定向循环的主要内容,如果未能解决你的问题,请参考以下文章

使用 nginx 上游的 Wordpress 常量重定向

WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)

访问代理中使用 apache 和 nginx 托管的 wordpress 时重定向到 127.0.0.1

使用 CloudFlare 和 OpenShift 以及 WordPress 应用程序进行重定向循环

我需要撤消重定向插件完成的重定向 URL

Nginx 配置导致无限重定向循环