我有这个配置试图将所有请求发送到/ login /从php目录/ var / www / saml_provider / www /:
location ^~ /login/ {
root /var/www/saml_provider/www/;
index moo.php;
try_files $uri $uri/ /login$is_args$args =404;
location ~ \.php$ {
fastcgi_pass presentation-php-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}
不幸的是,它然后希望文件位于/ var / www / saml_provider / www / login / root用户将url附加到路径。如何重写这个以删除/ login /以便在正确的位置找到文件? (NB不能将文件移动到登录目录中)。感谢
答案 0 :(得分:1)
您可以在内部将/login
重写为/saml_provider/www
,并将后者隐藏在外部访问中:
location ^~ /login {
rewrite ^/login(.*)$ /saml_provider/www$1 last;
}
location ^~ /saml_provider/www {
internal;
root /var/www;
index moo.php;
try_files $uri $uri/ /saml_provider/www/index.php$is_args$args;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass presentation-php-fpm:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
}
它简化了根问题的重写,并避免使用别名。但它确实意味着URI /saml_provider/www
已从外部访问中删除,但希望它不太可能与同一服务器上的另一个应用程序发生冲突。