• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. 未分类
  3. 正文

Nginx配置子路径WordPress(文件目录与url不同)

2017年08月06日 557点热度 0人点赞 0条评论
2016-04-01 from---https://artoriax.wordpress.com/2016/04/01/nginx%E9%85%8D%E7%BD%AE%E5%AD%90%E8%B7%AF%E5%BE%84wordpress%EF%BC%88%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95%E4%B8%8Eurl%E4%B8%8D%E5%90%8C%EF%BC%89/

先说结论:

第一需要使用Alias指定文件夹,第二由于try_files的bug,需要手写rewrite。

Nginx简直就是个智障。妈的花了我一个下午,翻了几十个stackoverflow和google才找到这么一个无人问津的小帖子。

需求:

主域名example.com下已经挂了静态站点,文件在/home/html/portal。现在要在example.com/blog目录下挂一个Wordpress博客,文件在/home/html/wordpress。

过程:

这么简单的一个小问题,竟然让人大费周章了半天时间,Nginx大概是我见过的这方面最垃圾的东西。要不是看在你性能高的份上,谁™会屌你。

  • 坑1:root指定的文件夹会与location前缀进行组合。

于是不论你怎么改root,只要物理路径不和url进行匹配,只要wordpress不放在根目录,那么Nginx只会在/physical/path/+/virtual/dir/的组合路径下查找wordpress文件(妈的智障,我为什么非要把wordpress文件夹改成和url一样?)

  • 坑2:经过一番google,你发现了alias命令,结果alias的路径末尾如果没有斜线就会404。

是不是想起了proxy_pass时候的斜线和location里的斜线?

  • 坑3:之前google到的很多例子,包括官方例子都写给你:try_files uri uri/ /virtual/dir/index.php?$args; 结果怎么不能用啊?

又经过一番google,你发现因为一个远古bug导致alias和try_files共用时出错了。于是你还得自己重写url。

  • 坑4:配置文件已经写得乱成一团了,我想把Wordpress的配置放在一起行不行?于是写成了nested location,这父级和子location是怎么个匹配法啊?

不知道为什么,没什么人用nested location。官方也没做什么解释,google了一番之后获得了一个提示,location向下传递的时候不会变化,仍然是完整匹配。于是又给所有的子location加了前缀正则匹配。

总算搞定了。。感觉好厉害啊,完全不懂怎么做到的。。。

参考配置例子:

location /blog {
  return 301 $scheme://$host/blog/;
}

location @blog {
  rewrite ^/blog/(.*)$ /blog/index.php?$1;
}

location /blog/ {
  index index.php;
  alias /home/html/wordpress/;

  try_files $uri $uri/ @blog;

  # Add trailing slash to */wp-admin requests.
  rewrite /wp-admin$ $scheme://$host$uri/ permanent;

  # Directives to send expires headers and turn off 404 error logging.
  location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off;
    log_not_found off;
    expires max;
  }

  location ~* ^/blog/(?:uploads|files)/.*\.php$ {
    deny all;
  }

  # Pass all .php files onto a php-fpm/php-fcgi server.
  location ~ ^/blog/(.+\.php)$ {
    alias /home/html/wordpress/$1;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    fastcgi_pass php;
  }
}

参考链接

http://www.netz39.de/2014/installation-of-wordpress-in-a-subdirectory-with-nginx/

标签: 暂无
最后更新:2017年08月06日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
证书的SCT相关 ssl证书生成时插入OID TrueNAS SCALE docker安装使用联合文件系统mergerfs Iptables 端口(流量)转发 如何在GIT中删除第一个提交 TrueNas 虚拟机无法连接主机 dnsmasq ipset iptables 实现对流量进行分流 新版 Ubuntu 修改IP DCHP K3S 创建portainer 通过声音进行数据传输 Windows精简部署相关简易内容 ConstraintLayout 和 Coordinator 对比 Android 为View分配id wireshark解析TCP tcpdump rpcapd 相关编译方法 双网卡调整优先级 Android 禁用IPv6 ​APC UPS相关资料 PowerChute Business Edition - Supported UPS Models
dnsmasq ipset iptables 实现对流量进行分流TrueNas 虚拟机无法连接主机如何在GIT中删除第一个提交Iptables 端口(流量)转发TrueNAS SCALE docker安装使用联合文件系统mergerfsssl证书生成时插入OID证书的SCT相关
简单的manjaro安装powerline及vim zsh配置 Android 为View分配id 软路由系统推荐 PHP获取操作系统、IP、地理位置、浏览器、ISP等信息_PHP类代码 freebsd CTRL+T 的功能 常用 Git 命令清单   原 Intelij IDEA 导入 Maven 项目后自动切换 JDK 到 1.5 的解决方案 WIN10和Ubuntu共享蓝牙4.0连接配对,鼠标键盘等 解决docker容器开启端口映射后,会自动在防火墙上打开端口的问题 国内外几款好用的网络质量测试工具推荐 Manjaro无法与vmware主机复制粘贴 Git remote 修改源 安装最新内核并开启 BBR vmware的硬件选项里有关于虚拟化引擎的选项 Maven启用代理访问 Android 非官方的发行版 git 设置代理 Windows 10 1903精简配置
标签聚合
chrome 密码 git 编译 ssl com windows ipv android docker 下载 linux http 网卡 https 未分类

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS