-1

我正在尝试使用带有 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 中更新他们的站点文件。

谢谢!

4

1 回答 1

0

看起来您已经复制了基本的 WordPress 设置,但我没有看到任何尝试实现您想要的逻辑。每个 WordPress 安装都有一个名为 index.php 的路由器,它应该是漂亮 URL 工作的全部。他们需要携带站点根目录下的第一个路径,这可能是 WordPress 配置设置。然后,您需要根据 request_uri 中的第一个路径组件设置根,并将不存在的文件和目录路由到相应的 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调试级别来包含重写调试信息。老实说,如果您使用基于此配置的虚拟主机,这可能会容易得多。您的开发人员只需要编辑他们的主机文件。

于 2013-05-27T18:56:46.437 回答