清源绿里

nginx对于不同子目录下wordpress伪静态规则

最近在考虑换空间提供商。因为 MEYU 的服务响应已经成问题了,但新物色的华夏名网在系统配置上和 MEYU 有很大不同,例如后者用的是 Ngix 而非 apache。目前 21percent 域名下挂有多个博客,每个博客是以子目录的形式访问。原本在 MEYU 系统中针对每个子文件夹都会产生一个 .htaccess 文件用以完成 WordPress 的永久链接功能,实现页面的伪静态。

但是在华夏名网,伪静态规则只能针对单个域名根目录生效,也就是说该域名下的所有子目录必须共享一个伪静态规则。这样势必要在这个伪静态规则文件中针对这些子目录分别填写 Rewrite 规则。

下面记录初步尝试成功的转发代码。在本例子中域名根目录下有两个子目录,分别对应 tina 和 zhudianxin 两个独立的 wordpress 博客。如果使用华夏名网的“伪静态设置”,则会出现 tina 与 zhudianxin 的日志链接最终又指回主域名。解决的办法就是放弃“伪静态设置”,将其留空,并在“自定义伪静态”中输入以下代码:

  1. location /tina/ {
  2.  
  3.   if (-f $request_filename/index.html){
  4.     rewrite (.*) $1/index.html break;
  5.   }
  6.  
  7.   if (-f $request_filename/index.php){
  8.     rewrite (.*) $1/index.php last;
  9.   }
  10.  
  11.   if (!-f $request_filename){
  12.     rewrite (.*) /tina/index.php last;
  13.   }
  14.  
  15. }
  16.  
  17. location /zhudianxin/ {
  18.  
  19.   if (-f $request_filename/index.html){
  20.     rewrite (.*) $1/index.html break;
  21.   }
  22.  
  23.   if (-f $request_filename/index.php){
  24.     rewrite (.*) $1/index.php last;
  25.   }
  26.  
  27.   if (!-f $request_filename){
  28.     rewrite (.*) /zhudianxin/index.php last;
  29.   }
  30.  
  31. }

在以上代码中,以 location 分别对应到 tina 和 zhudianxin 两个子目录,填写不同的转发规则。其中 break 的意思是立即断开转发,因此不能将其中的 last 替换为 break,否则将会造成访问不正常。

当然,也可以用以下代码实现伪静态。至于 try_files 和 rewrite 哪个效率更高,目前不得而知,需要做进一步的了解。

  1. location /tina/ {
  2.   index  index.php;
  3.   try_files $uri $uri/ /tina/index.php?$args;
  4. }
  5.  
  6. location /zhudianxin/ {
  7.   index  index.php;
  8.   try_files $uri $uri/ /zhudianxin/index.php?$args;
  9. }


Leave a Comment

  


无觅相关文章插件,快速提升流量