今天在上线一个新项目时,出现在本地测试好好的,但上线到服务器后nginx伪静态失效的问题。
在网上查询了很多资料都没有得到解决。
下面给大家展示一下原始伪静态规则代码:
rewrite ^/(verifyimg)(\.png)$ index.php?s=$1&%1 last;
rewrite ^/(log|reg|login|loginfunc|checkToken|index)$ index.php?s=$1 last;
rewrite ^/(at)\/(\w*)\/(\d*)(\.html)$ index.php?s=$1&c=$2&p=$3 last;
rewrite ^/(sc)\/(.*)\/(\d*)(\.html)$ index.php?s=$1&k=$2&p=$3 last;
rewrite ^/uc\/(.*)\.html$ index.php?s=uc&pg=$1 last;
rewrite ^/dt\/(\d*)\.html$ index.php?s=dt&id=$1 last;
rewrite ^/admin\/(.*)$ index.php?s=admin&pg=$1 last;
rewrite ^/api\/v1\/(.*)$ index.php?s=api/v1&pg=$1 last;
上面配置信息,在windows环境下没有出现问题,并且可以正常使用,说明配置的没有问题,但为什么上传到服务器就不生效了呢,并且显示404 not found。
经过我不断的测试及排查,发现确实是伪静态配置信息有问题,虽然在本地windows环境下是ok的,但毕竟linux和windows不同,所以会出现问题:
正确的配置如下:
rewrite ^/(verifyimg)(\.png)$ /index.php?s=$1&%1 last;
rewrite ^/(log|reg|login|loginfunc|checkToken|index)$ /index.php?s=$1 last;
rewrite ^/(at)\/(\w*)\/(\d*)(\.html)$ /index.php?s=$1&c=$2&p=$3 last;
rewrite ^/(sc)\/(.*)\/(\d*)(\.html)$ /index.php?s=$1&k=$2&p=$3 last;
rewrite ^/uc\/(.*)\.html$ /index.php?s=uc&pg=$1 last;
rewrite ^/dt\/(\d*)\.html$ /index.php?s=dt&id=$1 last;
rewrite ^/admin\/(.*)$ /index.php?s=admin&pg=$1 last;
rewrite ^/api\/v1\/(.*)$ /index.php?s=api/v1&pg=$1 last;
有没有发现上下两端内容有什么不同?
其实就是在每个index.php前面加了一个斜杠/,那是因为前面 的规则内容前也有斜杠/,这里还是很容易忽略的;
如果你也出现伪静态不生效问题,不妨往这个方便考虑检查一下。