2010-04-12 6 views
1

Je suis en train simple réécriture interne avec nginx pour accéder à un sous-répertoire en fonction du user_agent - les navigateurs mobiles vont/mobile, sinon ils vont à/wwwnginx - comment obtenir des directives de réécriture à exécuter avant les directives d'index?

mais il semble que quand je réécris ces urls, la directive index est traitée avant les réécritures, donc je finis par obtenir 403 interdit.

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

quand j'éteins les réécritures et cliquez sur le nom d'hôte (http://www.somehost.com/) l'index est affiché correctement. Quand ils sont activés, je dois explicitement naviguer vers somehost.com/index.php pour que le script s'exécute ...

Dois-je tester explicitement les répertoires, puis réécrire dans un index.php? fichier, ou existe-t-il une solution plus simple?

Répondre

1

C'était un problème avec un double appel. Oups. aurait dû savoir.

La première requête est arrivée en/puis a été réécrite sur/www /.

L'indice a ensuite été appliqué, donc plus il devient alors /www/index.php, mais le gestionnaire de php a été ré-appeler les règles de réécriture, de sorte que l'URL finale est devenu: /www/www/index.php

2

essayer:

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