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

Url rewriting nginx-如何让重写指令在索引指令之前执行?,url-rewriting,nginx,Url Rewriting,Nginx,我正在尝试使用nginx进行简单的内部重写,以根据用户\代理导航到一个子目录——移动浏览器转到/mobile,否则转到/www 然而,当我重写这些URL时,index指令似乎是在重写之前处理的,所以我最终得到403禁止 # TEST FOR INDEX index index.php # TEST PHONES if ($http_user_agent ~* '(iPhone|iPod)') { rewrite ^(.*)$ /mobile$1 break; } # OTHERWIS

我正在尝试使用nginx进行简单的内部重写,以根据用户\代理导航到一个子目录——移动浏览器转到/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;
当我关闭重新写入并点击主机名()时,索引显示正确。当它们打开时,我必须显式导航到somehost.com/index.php以运行脚本

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

试试:

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

这是一个双重通话的问题。哎呀。我早该知道的

第一个请求以/的形式出现,然后重新写入/www/

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