.htaccess 将htaccess重写迁移到nginx

.htaccess 将htaccess重写迁移到nginx,.htaccess,nginx,redirect,mod-rewrite,url-rewriting,.htaccess,Nginx,Redirect,Mod Rewrite,Url Rewriting,我对htaccess有以下重写规则: RewriteEngine on RewriteCond %{THE_REQUEST} /([^?]+?)(?:\.php)?\?lang=([^\s&]+) [NC] RewriteRule ^ /%2/%1? [R=301,L,NE] 规则将“lang”参数重定向到子目录: -> 如何在NGINX上创建相同的规则?请将以下规则放入NGINX规则文件中。我已经在路径/etc/nginx/sites enabled中放置了一个名为so_questi

我对htaccess有以下重写规则:

RewriteEngine on
RewriteCond %{THE_REQUEST} /([^?]+?)(?:\.php)?\?lang=([^\s&]+) [NC]
RewriteRule ^ /%2/%1? [R=301,L,NE]
规则将“lang”参数重定向到子目录: ->


如何在NGINX上创建相同的规则?

请将以下规则放入NGINX规则文件中。我已经在路径
/etc/nginx/sites enabled
中放置了一个名为so_question的文件,并在本地主机的
8081
上运行了该服务,这些文件运行得非常好(通过
curl
命令测试)。顺便说一句,我不是nginx的专家,我花了大量的时间来学习解决这个问题:)我希望这能有所帮助

根据您显示的htaccess,这假设您想从
http://localhost:8181/test.php?lang=en_abc123_singhblabla
http://localhost:8181/en_abc123_singhblabla-测试
(在规则文件的注释中也提到了这一点)


你好,莱奥,你能告诉我我的答案对你来说怎么样吗?很高兴知道进展如何,因为这也是我在这里学到的东西,干杯。
cat so_question
server {
       listen 8181;
       listen [::]:8181 ipv6only=on default_server;
       server_name localhost;

##Actual redirect rule which redirects from a URL eg-->
##http://localhost:8181/test.php?lang=en_abc123_singhblabla -->
##http://localhost:8181/en_abc123_singhblabla-test


if ($request_uri ~ "^/([^.]*)\.php\?lang=(.*)") {
    set $original_path $1;
    set $args1 $2;
    set $args "";

    rewrite ^ "$scheme://$host/${args1}-${original_path}" permanent;
}

}