nginx重写为index.php?q = $ uri

时间:2018-03-18 14:52:31

标签: php nginx nginx-location

我必须更新nginx主机,以便将对别名的所有请求重写为/alias_path/index.php?q=$uri。但现在所有的资产都不再可用了。

这是我目前的配置。而且我越来越近了,但是当我取消注释最后一个位置时,资产就不再可用了。

    location /csv-import {
            alias /var/www/csv-import/public;

            location ~ \.php$ {
                    include snippets/fastcgi-php.conf;
                    fastcgi_param  SCRIPT_FILENAME        $request_filename;
                    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            }

            try_files $uri $uri/ =404;

            #location ~ ^/csv-import/(.*)$ {
                    #alias /var/www/csv-import/public;
                    #try_files $uri $uri/ /csv-import/index.php?q=$1;
            #}

            error_log /var/log/nginx/csv-import.error.log;
            access_log /var/log/nginx/csv-import.access.log;
    }

我要访问的文件是/var/www/csv-import/public/index.php。应将example.com/csv-import/some/url等所有网址重写为example.com/csv-import/index.php?q=some/url,但example.com/csv-import/css/app.css下的/var/www/csv-import/public/css/app.css等资源应该可用。

我确信有一种解决方案可行,但我无法想出它。

1 个答案:

答案 0 :(得分:1)

您不需要另一个location块。通常的方法是更改​​try_files语句的默认操作。但由于this issueif块可能更简单:

location ^~ /csv-import {
    alias /var/www/csv-import/public;

    if (!-e $request_filename) {
        rewrite ^/csv-import/(.*)$ /csv-import/index.php?q=$1 last;
    }

    location ~ \.php$ {
        ...
    }

    error_log /var/log/nginx/csv-import.error.log;
    access_log /var/log/nginx/csv-import.access.log;
}

if块替换try_files语句。 ^~运算符避免了与其他location块的任何歧义。有关使用if的信息,请参阅this caution