2017-10-05 4 views
0

J'ai une configuration de serveur nginx comme ceci:Comment utiliser l'emplacement correspondant en tant que variable dans le bloc de serveur Nginx?

server { 
    listen 80; 
    listen [::]:80; 
    root /var/www/html; 
    index index.php index.html index.htm; 
    server_name example.com www.example.com; 

    location /project1/public { 
    try_files $uri $uri/ /project1/public/index.php?$query_string; 
    } 

    location /project2/public { 
    try_files $uri $uri/ /project2/public/index.php?$query_string; 
    } 

    location /project3/public { 
    try_files $uri $uri/ /project3/public/index.php?$query_string; 
    } 

    location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 
} 

et il fonctionne. Mais quand j'essaie d'utiliser regex (code suivant) pour le faire dynamiquement, il télécharge l'URL au lieu de l'afficher dans le navigateur.

server { 
    listen 80; 
    listen [::]:80; 
    root /var/www/html; 
    index index.php index.html index.htm; 
    server_name example.com www.example.com; 

    location ~ ^/([^/]+)/public { 
    try_files $uri $uri/ /$1/public/index.php?$query_string; 
    } 

    location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 
} 

Une idée?

Répondre

1

Essayez de modifier l'ordre de vos blocs de localisation.

Si vous cochez l'ordre/priorité des blocs d'emplacement dans Nginx Docs il y a deux règles qui sont importantes pour votre config:

  1. Si Nginx trouve un bloc d'emplacement conventionnel (comme /project1/public), il n'a pas arrêter la recherche et des expressions régulières et des blocs conventionnels plus seront jumelés premier

    -> donc, dans votre première configuration, Nginx premier feu votre php-regex emplacement, puis il exécute la try_files

  2. Les expressions régulières sont vérifiées dans l'ordre de leur apparition dans le fichier de configuration. La recherche d'expressions régulières se termine sur la première correspondance et la configuration correspondante est utilisée.

    -> Dans votre deuxième configuration, votre php-regex est jamais utilisé depuis le try_files se trouve d'abord