我必须更新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
等资源应该可用。
我确信有一种解决方案可行,但我无法想出它。
答案 0 :(得分:1)
您不需要另一个location
块。通常的方法是更改try_files
语句的默认操作。但由于this issue,if
块可能更简单:
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。