nginx对于不同子目录下wordpress伪静态规则
最近在考虑换空间提供商。因为 MEYU 的服务响应已经成问题了,但新物色的华夏名网在系统配置上和 MEYU 有很大不同,例如后者用的是 Ngix 而非 apache。目前 21percent 域名下挂有多个博客,每个博客是以子目录的形式访问。原本在 MEYU 系统中针对每个子文件夹都会产生一个 .htaccess 文件用以完成 WordPress 的永久链接功能,实现页面的伪静态。
但是在华夏名网,伪静态规则只能针对单个域名根目录生效,也就是说该域名下的所有子目录必须共享一个伪静态规则。这样势必要在这个伪静态规则文件中针对这些子目录分别填写 Rewrite 规则。
下面记录初步尝试成功的转发代码。在本例子中域名根目录下有两个子目录,分别对应 tina 和 zhudianxin 两个独立的 wordpress 博客。如果使用华夏名网的“伪静态设置”,则会出现 tina 与 zhudianxin 的日志链接最终又指回主域名。解决的办法就是放弃“伪静态设置”,将其留空,并在“自定义伪静态”中输入以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | location /tina/ { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php last; } if (!-f $request_filename){ rewrite (.*) /tina/index.php last; } } location /zhudianxin/ { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php last; } if (!-f $request_filename){ rewrite (.*) /zhudianxin/index.php last; } } |
在以上代码中,以 location 分别对应到 tina 和 zhudianxin 两个子目录,填写不同的转发规则。其中 break 的意思是立即断开转发,因此不能将其中的 last 替换为 break,否则将会造成访问不正常。
当然,也可以用以下代码实现伪静态。至于 try_files 和 rewrite 哪个效率更高,目前不得而知,需要做进一步的了解。
1 2 3 4 5 6 7 8 9 | location /tina/ { index index.php; try_files $uri $uri/ /tina/index.php?$args; } location /zhudianxin/ { index index.php; try_files $uri $uri/ /zhudianxin/index.php?$args; } |