disons que j'ai un chemin comme:
/var/www/myside/
ce chemin contient deux dossiers ... disons /static
et /manage
Je voudrais configurer nginx pour avoir accès à:
/static
dossier sur /
(par exemple. http://example.org/ ) ce dossier contient des fichiers .html.
/manage
dossier sur /manage
(par exemple http://example.org/manage ) dans ce cas, ce dossier contient Slim PHP framework code - cela signifie que le fichier index.php est dans le sous-dossier public
(par exemple. /var/www/mysite/manage/public/index.php)
J'ai essayé beaucoup de combinaisons comme
server {
listen 80;
server_name example.org;
error_log /usr/local/etc/nginx/logs/mysite/error.log;
access_log /usr/local/etc/nginx/logs/mysite/access.log;
root /var/www/mysite;
location /manage {
root $uri/manage/public;
try_files $uri /index.php$is_args$args;
}
location / {
root $uri/static/;
index index.html;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
}
Le /
fonctionne correctement quand même manage
ne fonctionne pas. Est-ce que je fais quelque chose de mal? Quelqu'un sait-il ce que je dois changer?
Matthieu.
Pour accéder à un chemin comme /var/www/mysite/manage/public
avec un URI comme /manage
, vous devrez utiliser alias
plutôt que root
. Voir ce document pour plus de détails.
Je suppose que vous devez exécuter PHP à partir des deux racines, auquel cas vous aurez besoin de deux location ~ \.php
blocs, voir l'exemple ci-dessous. Si vous n'avez pas PHP dans /var/www/mysite/static
, vous pouvez supprimer le bloc location
inutilisé.
Par exemple:
server {
listen 80;
server_name example.org;
error_log /usr/local/etc/nginx/logs/mysite/error.log;
access_log /usr/local/etc/nginx/logs/mysite/access.log;
root /var/www/mysite/static;
index index.html;
location / {
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
location ^~ /manage {
alias /var/www/mysite/manage/public;
index index.php;
if (!-e $request_filename) { rewrite ^ /manage/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
}
Le ^~
le modificateur fait que l'emplacement du préfixe a priorité sur les emplacements des expressions régulières au même niveau. Voir ce document pour plus de détails.
Les alias
et try_files
les directives ne sont pas ensemble à cause de ce bug de longue date .
Soyez conscient de cette prudence dans l'utilisation de la directive if
.