背景:
公司域名 z.yb.com 下有多个子项目目录结构大致是 z.yb.com/own/xys | z.yb.com/2017/abc | z.yb.com/2018/def 有二级也有三级目录,应开发需求某项目访问地址是:z.yb.com/own/xys/index.php/admin/login 需要把 index.php隐藏为 z.yb.com/own/xys/index/admin/login 进行访问
借鉴网上其他博客的写法,设定以下三种场景:
场景一
将 http://www.abc.com/index.php/front/index/index
重写成 http://www.abc.com/a.html
场景二
将 http://www.abc.com/index.php/front/index/parse?name=itboy&age=18
重写成 http://www.abc.com/parse-itboy-18.html
场景三(同一域名下,需要匹配随时新增的二三级目录,并隐藏index.php的.php后缀)
将 http://z.yb.com/own/xys/index.php/admin/login 以及 http://z.yb.com/2018/gdhp/index.php/login
重写成 http://z.yb.com/own/xys/index/admin/login 以及 http://z.yb.com/2018/gdhp/index/login
建议在nginx/conf目录下新建rewrite.conf配置文件中编写伪静态规则,写完后在域名.conf文件中插入rewrite.conf文件即可(用include rewrite.conf插入)
楼主的nginx配置文件如下:
server
{
listen 80;
server_name z.yb.com;
index index.html index.php index.htm index.php default.html default.htm default.php;
root /var/www/apps/z.yb.com;
include rewrite.conf;
include none.conf;
error_page 502 /502.html;
include enable-php-pathinfo.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /\.
{
deny all;
}
access_log /var/www/wwwlogs/z.yb.com.log;
error_log /var/www/wwwlogs/error.z.yb.com.log;
}
rewrite.conf文件内容如下:
location /
{
#场景一
#http://www.abc.com/index.php/front/index/index 变成 http://www.abc.com/a.html
rewrite a.html /index.php/front/index/index last;
#场景二
#http://www.abc.com/index.php/front/index/parse?name=itboy&age=18 变成 http://www.abc.com/parse-itboy-18.html
rewrite parse-(\w+)-(\d+).html /index.php/front/index/parse/name/$1/age/$2 last;
#场景三
#http://z.yb.com/own/xys/index.php/admin/login 以及 http://z.yb.com/2018/gdhp/index.php/login 变成 http://z.yb.com/own/xys/index/admin/login 以及 http://z.yb.com/2018/gdhp/index/login
rewrite ^/(\w+)/(\w+)/(.*)$ /$1/$2/index.php?s=$3 last; #针对own目录伪静态规则,$1对应(\w+)部分,$2对应第二个(\w+)部分,$3对应(.*)部分,$代表直至最后
rewrite ^/(\d+)/(\w+)/(.*)$ /$1/$2/index.php?s=$3 last; #针对后期的2018下的子项目伪静态规则
}
说明:
其实都是很简单的对号入座原理而已,拿场景二来说明,第一个正则(\w+)对应的就是$1,第二个正则(\d+)对应的就是$2,另外,\w是数字字母下划线的意思,\d是数字的意思 +是最少一个{1,} 1到无穷大{1,3} 这样是1-3位数。
如文章对您有帮助,请打开支付宝扫码领取红包,就当做对作者的支持,谢谢