我正在尝试使用带有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中更新。
谢谢!
答案 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的虚拟主机,这可能会容易得多。您的开发人员只需要编辑他们的主机文件。