清源绿里

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;
}

Leave a Comment