【问题标题】:Hosting Wordpress behind Nginx in a subdirectory在 Nginx 后面的子目录中托管 Wordpress
【发布时间】:2012-07-02 18:56:15
【问题描述】:

我正在尝试在 http://mydomain.com/blogtest 上安装 wordpress,并按照http://wiki.nginx.org/WordPress 上的指南进行操作,但是我仍然收到“未指定输入文件”。任何请求。

将 Nginx 1.2.1 和 PHP 5.3.6 与 php-fpm 一起使用

这里是 Nginx 配置文件:

upstream wptest {
  server 127.0.0.1:9000;
}

server {
  listen 80;
  server_name mydomain.com;

  access_log logs/access.log;
  error_log logs/error.log;

  location /blogtest {
    access_log logs/blogtest.access.log;
    error_log logs/blogtest.error.log;

    root /opt/myblogwp;

    index index.php;
    try_files $uri $uri/ /blogtest/index.php;

  }

  location ~ \.php$ {
    include /usr/local/nginx/conf/fastcgi_params;
    fastcgi_split_path_info ^(/blogtest)(/.*)$;
    fastcgi_intercept_errors on;
    fastcgi_pass wptest;
  }
}

这是我的 fastcgi_params 文件:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

# Next line added by AdamJT for php-fpm
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

#Concrete5 fix by AdamJT
#fastcgi_param  PATH_INFO          $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

我还编辑了 /usr/local/php/lib/php.ini 以设置 cgi.fix_pathinfo = 0;

【问题讨论】:

    标签: php wordpress nginx


    【解决方案1】:

    请记住,location /blogtest {} 表示您的文件将在

    下搜索
    /opt/myblogwp/blogtest
    

    这是您的 wp 网站的根目录吗?您可能需要使用alias 而不是location。 Alias 允许将虚拟目录 /somedir/ 设置为将根目录设置为 /opt/someotherdir/。 另外,我对fastcgi_split_path_info 不太熟悉,但那里似乎缺少一些东西。 看例子:

    Here's an example. The script show.php receives as argument the string article/0001. The following configuration will handle path splitting properly:
    
    location ~ ^.+\.php {
      (...)
      fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
      fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
      fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
      (...)
    }
    Requesting /show.php/article/0001 sets SCRIPT_FILENAME to /path/to/php/show.php and PATH_INFO to /article/0001.
    

    对于您的示例-我看不到您如何设置真正的 PATH_INFO 和 SCRIPT_FILENAME-您使用的是默认值...我想您必须稍微调整一下这些参数。你得到的错误是No input file specified。这意味着没有 script_filename 被传递给 PHP。因此,您应该跟踪并修复 PATH_INFO 和 SCRIPT_FILENAME,以便最后您应该得到如下内容:

    /path/to/wpresssite/index.php$fastcgi_script_name
    

    【讨论】:

    • 别名只能在位置内部使用,不能替代它。当我用别名替换 root 时,我得到了同样的错误。如何跟踪 PATH_INFO 和 SCRIPT_FILENAME?
    • 我对PHP不是很熟悉,实际上当我需要运行一个php站点时,我正在使用uwsgi。您使用什么 FCGI 服务器 - 在 127.0.0.1:9000 上监听什么?尝试启用一些详细的日志——如果你可以转储所有的 FCGI 参数——我想这足以找出问题所在。还尝试将 PATH_INFO 设置为静态路径(指向 WP 站点),并尝试调整 SCRIPT_FILENAME 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多