我正在尝试将网站从 apache 迁移到 nginx。在 apache 中,我有以下用于管理语言的配置:
RewriteRule fr/(.*) /$1?lang=fr [L,QSA]
RewriteRule en/(.*) /$1?lang=en [L,QSA]
我的根路径是/var/www
。
我的预期是:
- 静态文件(js、图片、css 等)应按原样提供(例如:
/css/common.css
应提供/var/www/css/common.css
) /
重定向至/en/
/myscript.php
重定向至/en/myscript.php
/(en|fr)/myscript.php
当 uri 与nginx匹配时,应该/var/www/myscript.php
使用查询提供服务?lang=(en|fr)
/(en|fr)/myscript.php?foo=bar
当 uri 与nginx匹配时,应该/var/www/myscript.php
使用查询提供服务?lang=(en|fr)&foo=bar
这是我的实际 nginx 配置:
root /var/www;
index index.php;
error_page 404 /error404.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
我该如何使用和来解决这个try_files
问题rewrite
?
答案1
您想要重写以/en
或开头的任何 URI /fr
。在选择 来处理请求之前,将测试rewrite
at范围,因此最简单的解决方案是:server
location
server {
...
rewrite ^/(en|fr)(/.*)$ $2?lang=$1 last;
location / { ... }
location ~ \.php$ { ... }
}
看这个文件了解详情。