nginx url 重写。我就是搞不懂

nginx url 重写。我就是搞不懂

好的,示例网址是

http://www.mysite.com/?p=account&view=settings

urip是一个常量。所有的 url 都有它。

view是众多可选 uri 之一。

我尝试过理解 URL 重写和正则表达式,但就是搞不懂。我需要回去写代码,但不幸的是,我只能继续回去nginx.conf接受更多的惩罚。

我的目标是重写 URL,如下所示:

http://www.mysite.com/account/view/settings

我会向您展示我尝试过的东西,但它只是复制和粘贴很多以前的例子,证明了我对正则表达式和 url 重写概念的掌握有多么糟糕。

如果有人可以花几分钟解释一下正则表达式部分,或者给我提供一个关于如何理解它的好教程的链接,我将不胜感激。

不,我不指望你帮我做这项工作,但我谦虚地请求你帮我掌握重写的概念和 nginx conf 中使用的变量。我可以看到一个叫做$uri,但不知道它是什么意思。我还需要添加一个正则表达式来拒绝和中 php 脚本的直接访问/socket/private但允许通过 ajax 进行访问。我相信我可以将学到的有关正则表达式的任何知识应用于该任务。

我的 nginx conf 的位置块

location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
location ~* .(png|gif|ico|css|js)$ {
    expires 365d;
}   
location ~ .(aspx|jsp|cgi)$ {
    return 410;
}
location /socket {
    return 405;
}
location /private {
    return 405;
}   
location / {
    # include /etc/nginx/naxsi.rules;
    index index.php;
    try_files    $uri $uri/ /index.php?q=$uri?;
    limit_req zone=one burst=5;
}

location /Denied {
    return 418;
}
error_page 500 /error.php?type=500;
error_page 501 /error.php?type=501;
error_page 502 /error.php?type=502;
error_page 503 /error.php?type=503;
error_page 400 /error.php?type=400;
error_page 401 /error.php?type=401;
error_page 403 /error.php?type=403;
error_page 404 /error.php?type=404;
error_page 405 /error.php?type=405;
error_page 406 /error.php?type=406;
error_page 413 /error.php?type=413;
error_page 414 /error.php?type=414;
error_page 418 /error.php?type=418;

答案1

我相信这个网站可能会对你有很大的帮助:

http://regex101.com/r/uP4nT1

答案2

你需要

location /yourlocations {
   if ($args ~* "p=[a-z]*&view=[a-z]*") {
        rewrite ^ http://yourwebsite.com/$arg_p/$arg_view? last;
        }

}

此外,如果您想捕获“视图”,您应该使程序将视图作为一个参数,例如:yourwebsite.com/?p=test&second=test2&third=test3,这样您就可以得到以下内容:

location /yourlocations {
       if ($args ~* "p=[a-z]*&second=[a-z]*&third=[a-z]*") {
            rewrite ^ http://yourwebsite.com/$arg_p/$arg_second/$arg_third? last;
       }

}

相关内容