使用Nginx进行多个WordPress安装

时间:2013-05-25 19:09:50

标签: php wordpress nginx

我正在尝试使用带有nginx的单个站点配置文件来为子文件夹中的任意数量的WordPress安装提供服务,但根本无法获得完全可用的永久链接。

+ root
    + WordPressOne
    + WordPressTwo
    + WordPressThree

禁用固定链接后,/WordPressOne/?p=12工作正常。启用永久链接后,/WordPressOne/MyPage/会导致从根文件夹传送404。

由于子文件夹中WP安装的数量不断变化(用于开发),我不想不断修改/创建/删除网站配置,我希望它能够工作,这样我就可以将新的WordPress安装复制到新的子文件夹,设置WP,并使固定链接适用于该安装,而无需重新启动nginx或PHP-FPM。

这是site.conf文件夹中使用的基本/etc/nginx/sites-available/(它反映了生产中使用的一些规则):

server {
    listen 5000 default;
    server_name dev wpdev;
    root /vagrant/sites;
    client_max_body_size 2m;
    expires -1;
    charset utf-8;
    index index.html index.php;

    location ~* ^.+\.(manifest|appcache)$ {
        expires -1;
        index index.html index.htm;
        uwsgi_cache off;
    }

    location ~* \.(?:rss|atom)$ {
        expires 1h;
        add_header Cache-Control "public";
    }

    location ~* ^.+\.(css    |js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|eot|mp4|ogg|ogv|webm|txt)$ {
        expires max;
        access_log off;
        index index.html index.htm;
        add_header Cache-Control "public";
        uwsgi_cache off;
    }

    location / {
        try_files $uri $uri/ /index.php?$args;
        uwsgi_cache off;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        uwsgi_cache off;
        include /etc/nginx/fastcgi_params;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

    add_header "X-UA-Compatible" "IE=Edge,chrome=1";
    add_header "Vary" "Accept-Language";
    add_header "Access-Control-Allow-Origin" "*";
    add_header "Cache-Control" "no-transform";
}

这也被用作虚拟机配置的一部分(使用Vagrant,正如你所看到的),我喜欢设计师和WP开发人员不必担心保持他们的网站文件在nginx中更新。

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来你已经复制了一个基本的WordPress设置,我看不到尝试实现你想要的逻辑。每个WordPress安装都有一个名为index.php的路由器,它应该是美丽URL工作的全能。他们需要携带站点根目录下的第一条路径,这可能是一个WordPress配置设置。 然后,您需要根据request_uri中的第一个路径组件设置root,并将非现有文件和目录路由到相应的index.php。 我不完全确定这会起作用,也不能测试时间限制,所以试试这个并报告回来:

set $wpinstall = '';
location ~ /([^/]+)/(.*)$ {
    set $wpinstall = $1;
    try_files $uri $uri/ @wp;
}

location @wp {
    rewrite /$wpinstall/ /$wpinstall/index.php;
}

location ~ ^(.+\.php)(.*)$ {
    root /vagrant/sites;
    fastcgi_split_path_info ^(.*\.php)(.*)$;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/$wpinstall$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    #...rest of fastcgi parameters
}

如果您回报,请务必通过设置相应的error_log调试级别来包含重写调试信息。老实说,如果您使用基于this configuration的虚拟主机,这可能会容易得多。您的开发人员只需要编辑他们的主机文件。