nginx 重写为 index.php?q=$uri
nginx rewrite to index.php?q=$uri
我必须更新 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=;
#}
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
.
下可用
我确信有一个完美的解决方案,但我想不出来。
您不需要另一个 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= last;
}
location ~ \.php$ {
...
}
error_log /var/log/nginx/csv-import.error.log;
access_log /var/log/nginx/csv-import.access.log;
}
if
块替换了 try_files
语句。 ^~
运算符在使用 if
.
时避免了与其他 location
blocks. See this caution 的任何歧义
我必须更新 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=;
#}
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
.
我确信有一个完美的解决方案,但我想不出来。
您不需要另一个 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= last;
}
location ~ \.php$ {
...
}
error_log /var/log/nginx/csv-import.error.log;
access_log /var/log/nginx/csv-import.access.log;
}
if
块替换了 try_files
语句。 ^~
运算符在使用 if
.
location
blocks. See this caution 的任何歧义