我正在尝试建立一个网站,例如写作
/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
}