使用nginx重写根URL删除url目录

时间:2016-09-26 15:27:17

标签: nginx nginx-location

我有这个配置试图将所有请求发送到/ 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不能将文件移动到登录目录中)。感谢

1 个答案:

答案 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已从外部访问中删除,但希望它不太可能与同一服务器上的另一个应用程序发生冲突。