我正在尝试使用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文件,还是有更简单的解决方案?
答案 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