如何NGINX重写Wordpress的特定页面

时间:2017-06-23 18:21:42

标签: wordpress nginx

所以我尝试做一些独特的事情,我花了几个小时阅读NGINX重写以及如何为特定页面创建一个CATCH ALL。

我想做什么:

mysite.com/Subdivision/是一个wordpress PAGE。

我希望能够随机生成(TAIL PAGES),默认情况下都会转到更高版本的wordpress页面(mysite.com/Subdivision/):

mysite.com/Subdivision/Green-Trails
mysite.com/Subdivision/River-Oaks
mysite.com/Subdivision/Creek-Plantation

然后在我/ Subdivision /页面内,我将编写脚本告诉它如何处理“Green-Trails”和“River-Oaks”以及“Creek-Plantation”

在此之后,目标是添加其他内容,如

mysite.com/Subdivision/Green-Trails/4-bdr/with-pool/

和my / Subdivision页面将在Request-URI中找到“IF 4-bdr”设置,设置此项。如果在请求URI中找到了with-pool,请设置此...这将全部用PHP代码段完成。

只需要通过NGINX写入障碍。

这是我目前使用NGINX的Centmin设置:

    ## BEGIN WORDPRESS MOD ##
index index.php index.html index.htm;
        # enforce www (exclude certain subdomains)
        if ($host !~* ^(www|subdomain))
        {
            #    rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
        }
        # enforce NO www if ($host ~* ^www\.(.*)) {
        #       set $host_without_www $1; rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
        #}


        # unless the request is for a valid file, send to bootstrap
        if (!-e $request_filename)
        {
                rewrite ^(.+)$ /index.php?q=$1 last;
        }


location ~ /subdivision/(.*) {
    index index.php;
    try_files $uri /index.php?q=/subdivision/&$args;
}

  location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

## END WORDPRESS MOD ##

如你所见:`

location ~ /subdivision/(.*) {
    index index.php;
    try_files $uri /index.php?q=/subdivision/&$args;
}

`

我试图告诉NGINX将/ Subdivision / page变量发送到wordpress并告诉Wordpress IGNORE其余的URL / Green-Trails / / River-Oaks /,/ Creek-Plantation /

但这不起作用,有人可以帮助我,我在哪里错过了?

1 个答案:

答案 0 :(得分:0)

问题是WordPress不使用查询字符串来确定要显示的页面,它直接从REQUEST_URI获取信息,REQUEST_URI通常设置为原始URI(在执行任何内部重写之前)。

简单的解决方案是执行外部重定向,但这会改变浏览器中显示的URI。

通过明确设置SCRIPT_FILENAME和REQUEST_URI可以实现您想要的目标:

location ^~ /subdivision/ {
    include fastcgi_params;
    fastcgi_pass localhost:9000;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param REQUEST_URI     /Subdivision/;
}