我已成功在 NginX 上部署了我的 wordpress 网站。我需要 永久链接http://www.example.com/%postname%
和 博客http://blog.example.com/%postname%
。它将所有 www 流量重定向到非 www,但当我尝试通过取消注释下面为 NginX 编写的 mydomain 配置文件中的行来将其配置为将非 www 重定向到 www 时,浏览器抱怨重定向循环。
我的 global/restrictions.conf 是:
http://pastebin.com/cLfMv6jC
并且 global/wordpress.conf 是:
http://pastebin.com/Uc9KSqhh
带有服务器块的 NginX mydomain 配置文件如下:
server {
server_name _;
return 301 $scheme://www.example.com$request_uri;
}
#server {
# listen 80;
# server_name example.com;
# return 301 $scheme://www.example.com$request_uri;
#}
server {
listen 80 default_server;
listen [::]:80;
root /usr/share/nginx/html/example.com;
index index.php index.html index.htm;
server_name www.example.com;
include global/restrictions.conf;
include global/wordpress.conf;
}
请指出我的错误。
[更新]事实上,我还有以下服务器块:
server {
listen 80;
listen [::]:80;
root /usr/share/nginx/html/mydomain_test;
index index.php index.html index.htm;
server_name test.example.com;
include global/restrictions.conf;
include global/wordpress.conf;
}
答案1
我不明白你为什么使用server_name _
。它曾经用于指定默认服务器,但你却将server_name www.mydomain.com
stanza 设置为默认服务器(listen 80 default_server
)。
我会按如下方式重写您的配置:
server {
listen 80;
listen [::]:80;
server_name www.mydomain.com;
root /usr/share/nginx/html/mydomain.com;
index index.php index.html index.htm;
include global/restrictions.conf;
include global/wordpress.conf;
}
server {
listen 80 default_server;
server_name mydomain.com;
return 301 $scheme://www.mydomain.com$request_uri;
}
如果上述修改不起作用,我会重点关注您的包含内容。通过创建一个简单的/usr/share/nginx/html/mydomain.com/test.html
并修改第一节来隔离它们:
server {
listen 80;
listen [::]:80;
server_name www.mydomain.com;
root /usr/share/nginx/html/mydomain.com;
index test.html
}
然后,通过访问www.mydomain.com
和进行测试domain.com
,看看是否两者都会将您引导至test.html
您创建的。如果是,则深入研究这些包含的内容。
答案2
您的 wordpress 安装还能够将访问者重定向到它认为正确的 URL。它通过使用 php header() 函数指定 Location: 标头来实现这一点。因此,您可能会看到您的网站重定向到您告诉 nginx 去的地方,然后 wordpress 将其发回。
在您的 wp_options 表中,将名为“siteurl”和“home”的选项设置为 www.domain.com uri。