将 htaccess url 重写规则转换为 nginx

将 htaccess url 重写规则转换为 nginx

我如何在这里转换我的 htaccess 规则

RewriteRule ^/?([^/]+)/([^/]+)/?$ page-1.php?a=$1&b=$2 [L,QSA]
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/?$ page-2.php?a=$1&b=$2&c=$3 [L,QSA]

进入 nginx 规则?我试过使用转换器,但得到了以下结果

winginx
location / { 
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break; 
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;
}


anilcetin
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 last;
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 last;

但实际上它们都没有起作用,这里的问题是什么?

在我的代码中这里有一个类似的页面

domain.com?page-1.php?a=a&b=b将会变成domain.com/a/b

domain.com?page-2.php?a=a&b=b&c=c进入domain.com/a/b/c

答案1

问题

您的评论表明您对正则表达式和重写语句感到满意,并且只需要有关 Nginx 和位置块部分的帮助。

快速浏览一下并不能让我确信您的重写是正确的。我期望更多这样的内容 - 请注意,这肯定是错误的,绝对不是最佳的,甚至可能无法通过“nginx -t”检查。

rewrite ^/([0-9a-zA-Z_\-\s\+]+)?a=([0-9a-zA-Z_\-\s\+]+)&b=([0-9a-zA-Z_\-\s\+]+)*c=([0-9a-zA-Z_\-\s\+]+)  /$2/$3/$4;

这里的总体思路是,为您关心的 URL 的每个部分创建一个捕获组,并在前面加上一个未使用的捕获组。第一个只是因为我不擅长正则表达式,而且从我自己的配置中复制粘贴一些可能有用的内容更容易。

Nginx Locations 和 RegEx

Nginx 重写可以位于服务器或位置上下文中,并按照配置文件中的顺序工作。对于你来说,我可能会将它们放在站点配置文件的顶部附近,位置块的上方

server {
  server_name example.com;
  listen 80;

  rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break; 
  rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;

  location / { 
    # Whatever you want in here to handle the rewritten or normally requested URLs
    # root /var/www/html;
    # proxy_pass 1.2.3.4;
  }

  location /a {
    # If you want to handle specific URLs you can do it in another location block
  }
}

对你的问题的总体评价是它不是很精确,并且没有表明你已经努力自己解决问题。

相关内容