1

PHP MVC 风格的路由器通常处理这样的请求index.php?route=one/two/three...- 由正斜杠分隔的查询字符串为系统提供了一条可遵循的路线(例如文件夹 > 文件 > 功能,或公司 > 部门 > 程序 > 操作)。

一个示例请求是:

GET http://localdomain/user/profile/modify
  > /index.php?route=user/profile/modify
    > /user/profile.php
      > modify()

考虑到所有这些,我编写了我的 nginx 服务器配置,如下所示:

set $i /index.php;
location ~ ^/([a-z0-9-]*)$                             { rewrite ^/([a-z0-9-]*)$                             $i?route=$1       last; }
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)$               { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)$               $i?route=$1/$2    last; }
location ~ ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ { rewrite ^/([a-z0-9-]*)/?([a-z0-9-]*)/?([a-z0-9-]*)$ $i?route=$1/$2/$3 last; }

正则表达式的最佳实践要求我将其更改为能够处理 1 个或多个参数的单行(可能通过使用中继器)。我的正则表达式知识有限,我该怎么做?

4

1 回答 1

1

通过在字符组中添加斜杠,index.php?route= 无论文件夹结构有多长,这都会发送任何请求:

location ~ ^/([a-z0-9\/-]*)$ { rewrite ^/([a-z0-9\/-]*)$ $i?route=$1 last; }

它基本上适用于文件夹类型的请求,并且不会触发任何带有点的东西(例如.php .html等),因此index.php其他人是安全的。

于 2013-01-10T12:25:20.457 回答