从另一个网站内设置 wordpress 文件夹的别名

从另一个网站内设置 wordpress 文件夹的别名

我有点为难。我编写了一个自定义 PHP MVC 框架,并在其基础上构建了一个 CMS。我决定也尝试一下 nginx+fpm。这就是我为难的根源。有人要求我将一个 wordpress 博客合并到我的网站中(是的)。它包含大量内容,在如此短的时间内将所有内容都放入我的 CMS 中是不可行的。由于使用 Apache 多年,我承认,在使用 nginx 时有点不知所措。

我的网站有以下文件路径:

/opt/directories/mysite/public/

wordpress 文件位于:

/opt/directories/mysite/news/

我知道我只需要设置以 /news[/*] 为目标的位置,然后将所有匹配的 URI 强制到其中的 index.php。有人能给我指出正确的方向吗?

我的配置如下:

server {

        listen   80;
        server_name staging.mysite.com

        index   index.php;

        root /opt/directories/mysite/public;

        access_log  /var/log/nginx/mysite/access.log;
        error_log   /var/log/nginx/mysite/error.log;

        add_header  X-NodeName  directory01;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

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

        location ~ /news {
                try_files $uri $uri/ @news;
        }

        location @news {
                fastcgi_pass unix:/tmp/php-fpm.sock;
                fastcgi_split_path_info ^(/news)(/.*)$;
                fastcgi_param SCRIPT_FILENAME /opt/directories/mysite/news/index.php;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        include fastcgi_params;
        include php.conf;

        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
                access_log        off;
                expires           30d;
        }

        ## Disable viewing .htaccess & .htpassword
        location ~ /\.ht {
                deny  all;
        }
}

我的 php.conf 文件:

location ~ \.php {
        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;
        fastcgi_param  SCRIPT_FILENAME    $document_root$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;

        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;

        fastcgi_pass unix:/tmp/php-fpm.sock;

    # If you must use PATH_INFO and PATH_TRANSLATED then add 
    # the following within your location block above 
    # (make sure $ does not exist after \.php or /index.php/some/path/ will not match):

    #fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #fastcgi_param  PATH_INFO          $fastcgi_path_info;
    #fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
}

fastcgi_params 文件:

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;

非常感谢@Kromey,我已经调整了我的位置/新闻/,但仍然没有得到想要的结果。

当我发现我的 php 位置首先被匹配时,我能够学会跟踪 ~ 我的 /news 位置。

通过此设置,我现在获得了 200 状态,但页面为空白。有什么想法吗?

答案1

这实际上非常简单,并且比 Apache 上 Wordpress 的类似设置紧凑得多(我运行了 2 个 Wordpress 博客,之前都在 Apache 上,最近都迁移到了 nginx+PHP(不是 FPM,虽然我确实运行了一段时间,后来才决定对我的低流量网站来说它有点大材小用))。

location /news/ {
    #Need a new root to point to your "aliased" directory
    root /opt/directories/news
    # This is cool because no php is touched for static content
    try_files $uri $uri/ /index.php;
}

正如评论所暗示的,任何存在于 Wordpress 路径中的静态内容(图像、CSS、JavaScript、robots.txt 等)都会直接提供,无需 PHP 参与;一切否则将被路由至index.php。

请注意,该try_files指令是半新的(我认为是 0.8?),因此您可能必须升级您的 nginx;当我从 Ubuntu apt 存储库安装时,版本太旧了,无法执行此操作,并且配置非常复杂,所以我apt-get remove这样做了并从源代码安装了 nginx(一个相当简单的操作)。

相关内容