2017-08-15 2 views
1

Je travaille avec des sous-répertoires. Je veux "babylon/webmail" pour aller à mon client webmail rainloop.

location ^~ /webmail { 
    root /srv/rainloop/public_html; 
    try_files $uri $uri/ /webmail/index.php?$query_string; 
    access_log /srv/rainloop/logs/access.log; 
    error_log /srv/rainloop/logs/error.log; 
    index index.php; 
    access_log /var/log/nginx/scripts.log scripts; 

    location ~ \.php$ { 
     #fastcgi_index index.php; 
     #fastcgi_split_path_info ^(.+\.php)(.*)$; 
     #fastcgi_keep_conn on; 
     #include /etc/nginx/fastcgi_params; 
     #fastcgi_pass unix:/var/run/php5-fpm.sock; 
     #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

     #try_files $uri =404; 
     include fastcgi_params; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param SCRIPT_FILENAME /srv/rainloop/public_html/index.php; 
     #include fastcgi_params; 
    } 

    location ~ /\.ht { 
     deny all; 
    } 

    location ^~ /webmail/data { 
     deny all; 
    } 
} 

Cependant, cette

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

ne fonctionne pas du tout. Il imprime:/srv/rainloop/public_html/webmail /index.php; Ce fichier n'existe pas dans la structure de répertoire, mais: /srv/rainloop/public_html/index.php

fastcgi_param SCRIPT_FILENAME /srv/rainloop/public_html/index.php; 

PS: Après hardcoding, je ne reçois pas d'erreur du tout, mais la page est vide avec un code source de code rainloop.

Répondre

1

Le chemin d'accès au fichier est calculé en concaténant la valeur de root à l'URI. L'URI contient /webmail/index.php, sinon il ne correspondrait pas au bloc location.

Vous voulez probablement utiliser alias au lieu de root car cette directive supprime la valeur du préfixe location lors du calcul du chemin d'accès au fichier. Voir this document pour plus de détails.

location ^~ /webmail { 
    alias /srv/rainloop/public_html; 
    if (!-e $request_filename) { rewrite^/webmail/index.php last; } 

    ... 

    location ~ \.php$ { 
     if (!-f $request_filename) { return 404; } 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $request_filename; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
} 

Évitez d'utiliser dans le même bloc try_files et alias, en raison de this long term issue, et voir this caution sur l'utilisation de if. Utilisez $request_filename pour la valeur SCRIPT_FILENAME.