Nginx加载子路径为wordpress root

时间:2017-10-27 16:47:48

标签: nginx nginx-location

我试图在安装了另一个php应用程序的系统中设置Wordpress,使用nginx作为Web服务器。

我已将配置文件简化为maximun。以下confi正在为我的博客发布一篇文章:

server {
    listen 80;
    server_name blog.ct.com;
    root /home/ff/www/blog/;
    index index.php index.html;

    location / {
            try_files $uri $uri/ /index.php?$uri&$args =405;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_buffer_size 128k;
            fastcgi_buffers 64 32k;
            fastcgi_busy_buffers_size 128k;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            include /etc/nginx/fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param APPLICATION_ENV development;
            fastcgi_param HTTP_X_FORWARDED_PROTO https;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
    }
 }

但是,由于我的系统要求,我需要在子路径内提供博客(在我的最终系统http://blog.ct.com/中应该提供我的自定义php应用程序,而http://blog.ct.com/vendor应该提供服务wordpress博客)。

wordpress的本地根目录必须是/home/ff/www/blog/(这不能更改,而我的自定义应用程序的目录是/home/ff/www/myapp/)。所以我想我需要为我的自定义应用保留location /,我必须创建一个location /vendor

如果我添加/vendor并在/中返回403(只是为了更容易调试),浏览器会显示405(注意=405中的/vendor,也要调试更容易):

location /vendor {
        try_files $uri $uri/ /index.php?$uri&$args =405;
}
location / {
        return 403;
}

所以我认为nginx进入location /vendor但是没有在/home/ff/www/blog/index.php找到我的php脚本,所以它返回了回退405。

知道为什么会这样吗?

如何从wordpress加载http://blog.ct.com/vendor作为root用户,但使用另一个php脚本保留http://blog.ct.com/

1 个答案:

答案 0 :(得分:0)

我发现以下提示给了我修复问题的线索(如果有人遇到与我相同的问题,这可能有帮助)

  • 使用Sub delete() Dim rngStart As Range Dim rngEnd As Range Dim rngDelete As Range Dim wordOne As String wordOne = "word1" Dim wordTwo As String wordTwo = "word2" Selection.HomeKey Unit:=wdStory With Selection.Find .Text = wordOne Do While .Execute(Forward:=True, Format:=True) = True Selection.HomeKey Unit:=wdStory Selection.Find.Execute FindText:=(wordOne) Set rngStart = Selection.Range ' At this point the selection = the 'found text' Selection.Collapse wdCollapseEnd ' set range to end of found text Selection.Find.Execute FindText:=(wordTwo) Set rngEnd = Selection.Range Set rngDelete = rngStart.Duplicate 'rngDelete.Collapse wdCollapseEnd ' Keep wordOne rngDelete.Collapse wdCollapseStart ' Delete wordOne 'rngDelete.End = rngEnd.Start ' Keep wordTwo rngDelete.End = rngEnd.End ' Delete wordTwo rngDelete.Text = " " ' replace rngDelete Text with a space 'rngDelete.Text = vbNullString ' replace rngDelete Text with nothing Loop End With End Sub 与使用location /path不同(正则表达式具有不同的优先级,因此可能没有按照您认为的顺序进行检查)
  • location ~(/path)添加到任何error_log /your/path/log/error.log debug;块可以帮助您了解nginx如何为每个请求提供服务(例如location locationfastcgilocation \vendor阻止)。
  • server{的工作方式与alias /var/www/path/vendor不同(查看Nginx -- static file serving confusion with root & alias);
      

    如果是root指令,则将完整路径附加到根,包括位置部分,而在alias指令的情况下,只有路径中不包括位置部分的部分会附加到别名。

  • 使用root /var/www/path/vendorrewrite可以帮助您解析您想要的独立于路径的php文件 alias
  • 照顾您正在使用的if (!-f $request_filename) { rewrite ^ $document_root/index-wp.php last; }(请与SCRIPT_FILENAME一起查看,请参阅上文),也许您需要error_log但是您正在加载fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;,这取决于您的身份以前的配置,您可能会将文档根附加两次。
  • 如果更改index.php文件名,则可以使用fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;的两种不同配置。例如。 fastcgi将与wp.php一起使用,而location ~ wp\.php$ {将与所有其他php文件一起使用,例如index.php。