我如何在这里转换我的 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
}
}
对你的问题的总体评价是它不是很精确,并且没有表明你已经努力自己解决问题。