0x01 前言
想要实现一个需求,将链接http://domain.com/test映射到http://domain.com/index.php?param=test
0x02 初次尝试
然后在宝塔中设置伪静态规则(宝塔面板的站点设置直接提供了伪静态配置的功能就不需要再去修改nginx.conf文件,懒癌狂喜,反正我也懒得去改):
先测试一下:
基础功能已经实现了,但是仍有不足。因为直接设置规则为rewrite ^/(.+)$ /index.php?param=$1 last;
后,服务器将会把"/"后的所有内容视为param参数值,包括index.php子目录下的所有文件,也将被当作参数值处理,如:
test.txt文件没有被Nginx服务器列出,而是将文件的路径名视作参数值处理了。
0x03 修改正则规则和php程序
退而求其次,将正则规则修改为rewrite ^/u/(.+)$ /u/index.php?param=$1 last;
,这样正则表达式^/u/(.+)$中的/u/就限定了只有http://domain.com/u/后的内容才会被识别,而如果用户请求非/u/目录下的文件,服务器都会根据文件类型的不同做出相应的响应,而不会再将其视作传入的参数值。
再新建一个子目录"/u/",将index.php移动到子目录"/u/"。
构造链接http://domain.com/u/123进行测试,成功:
0x04 总结
1.规则rewrite ^/(.+)$ /index.php?param=$1 last;适用于主目录和子目录下没有其他文件需要访问,只需要传入参数功能。
2.规则rewrite ^/u/(.+)$ /u/index.php?param=$1 last;适用于主目录和子目录下都有其他文件需要正常访问,使用/u/可以进行限定。
3.冲冲冲!