Nginx 重写和 50x.html

Nginx 重写和 50x.html

我正在尝试建立一个网站,例如写作

/users/add

重定向至

/index.php?table=users&action=add

我写了以下规则:

rewrite ^/(.+)/(.+)/$ /index.php?table=$1&action=$2 break;
rewrite ^/(.+)/(.+)$ /index.php?table=$1&action=$2 break;
rewrite ^/(.+)/$ /index.php?table=$1&action=$2 break;
rewrite ^/(.+)$ /index.php?table=$1&action=$2 break;

我这样做是因为如果我只写 /users/,规则就不适用。此外,我必须为每种情况编写两条规则,因为如果我有“/users/add/”,我会得到“add/”(带斜线)作为第二个参数。

这实际上不起作用,因为如果我想访问“50x.html”,我会将字符串作为参数“table”。我该如何重写规则(也许将它们组合起来)以便可以访问文件并使用友好的 URL?谢谢!

答案1

我同意迈克尔的观点。

但你必须有选择。

location / {
    try_files $uri @php;
}

location @php {
    # suppose you don't mind if in url /users/add/blabla, blabla will be lost
    rewrite ^/([^/]+)(/([^/]+)?)? /index.php?table=$1&action=$3 break;
    fastcgi_pass ...;
    # other params
}

相关内容