【问题标题】:Use nginx Rewrite root url to remove the url directory使用 nginx Rewrite root url 删除 url 目录
【发布时间】:2016-09-27 00:07:45
【问题描述】:

我有这个配置,它试图将所有请求发送到 /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/ 以便在正确的位置找到文件? (注意将文件向下移动到登录目录不是一种选择)。谢谢

【问题讨论】:

    标签: nginx nginx-location


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多