nginx - 如何在索引指令之前执行重写指令?

时间:2010-04-12 17:22:15

标签: url-rewriting nginx

我正在尝试使用nginx进行简单的内部重写,以导航到子目录,具体取决于user_agent - 移动浏览器转到/ mobile,否则他们会转到/ www

然而,当我重写这些url时,似乎在重写之前处理了index指令,所以我最终得到403禁止。

# TEST FOR INDEX
index index.php

# TEST PHONES
if ($http_user_agent ~* '(iPhone|iPod)') {
    rewrite ^(.*)$ /mobile$1 break;
}

# OTHERWISE WE ARE DONE
rewrite ^(.*)$ /www$1 break;

当我关闭重写并点击主机名(http://www.somehost.com/)时,索引会正确显示。当它们打开时,我必须明确导航到somehost.com/index.php以使脚本运行...

我是否必须对目录进行明确测试,然后重新写入index.php文件,还是有更简单的解决方案?

2 个答案:

答案 0 :(得分:2)

尝试:

server {
  index index.php;
  location / {
    if ($http_user_agent ~* '(iPhone|iPod)') {
      rewrite ^(.*)$ /mobile$1 last;
    }
    rewrite ^(.*)$ /www$1 last;
  }
}

答案 1 :(得分:1)

这是双重调用的问题。糟糕!应该知道。

第一个请求以/然后重新写入/ www /.

然后应用了索引,因此它变为/www/index.php,但是php处理程序重新调用了重写规则,因此最终的url变为:/www/www/index.php