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 重定向循环的主要内容,如果未能解决你的问题,请参考以下文章
WordPress + CloudFront 灵活 SSL 最终进入重定向循环 (https)
访问代理中使用 apache 和 nginx 托管的 wordpress 时重定向到 127.0.0.1