nginx的伪静态rewrite规则,匹配栏目目录没有斜杠不能访问

我的rewrite是这样的
rewrite ^/(.*)(.*)/$ /index.php?m=content&c=index&a=lists&categorydir=$1&catdir=$2 last;
访问
http://192.168.1.101/news/china/
就会跳转到对应的列表页,但是如果url最后没有斜杠的话,直接404,所以我在下面又加了一条
rewrite ^/(.*)(.*) /index.php?m=content&c=index&a=lists&categorydir=$1&catdir=$2 last;
这样目录最后没有斜杠也可以访问了。但是问题来了,我首页打不开了,访问首页直接被解析到了列表页的路径然后因为获取不到参数报错,请问怎么解决这个问题?
最新回答
青澜饮舟

2024-04-13 02:01:41

这个是你的真实路径
/index.php?m=content&c=index&a=lists&categorydir=news/china/ &catdir=news/china/
你访问页面应该是直接输入
http://192.168.1.101
,网站会自动访问/news/china/这个指定目录或者说是访问/news/china/index.php,但是你指定的是目录而不是文件,如果你去掉/那么访问的是192.168.1.101/news/china这个文件了,他就找不到,所以肯定访问不了
爱情,算个屁丶

2024-04-13 06:32:54

这个是很显然的事情,原因在于你的rewrite规则是"^/(.*)(.*)/$" 这样的话就是必须以/结尾的请求才会转发。因此会出现你说的第一种情况。

#首页:
rewrite "^/+" /index....... break;
#其它页面
rewrite "^/([^/]*)([^/]*)" index.php break;
少女爷爷

2024-04-13 00:30:01

请贴全一下你的配置文件,最后一个/有或者没有使用问号(?)来解决,多看看正则对你会很有帮助
rewrite ^/(.*)(.*)/?$ /index.php?m=content&c=index&a=lists&categorydir=$1&catdir=$2 last;