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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
这样目录最后没有斜杠也可以访问了。但是问题来了,我首页打不开了,访问首页直接被解析到了列表页的路径然后因为获取不到参数报错,请问怎么解决这个问题?

这个是你的真实路径
/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这个文件了,他就找不到,所以肯定访问不了
参考技术A 这个是很显然的事情,原因在于你的rewrite规则是"^/(.*)(.*)/$" 这样的话就是必须以/结尾的请求才会转发。因此会出现你说的第一种情况。

#首页:
rewrite "^/+" /index....... break;
#其它页面
rewrite "^/([^/]*)([^/]*)" index.php break;本回答被提问者和网友采纳
参考技术B 请贴全一下你的配置文件,最后一个/有或者没有使用问号(?)来解决,多看看正则对你会很有帮助
rewrite ^/(.*)(.*)/?$ /index.php?m=content&c=index&a=lists&categorydir=$1&catdir=$2 last;

typecho安装在子目录的nginx伪静态规则

使用lnmp搭建的服务器环境,Typecho网站安装在子目录和安装在根目录使用的nginx伪静态规则会有差异,如果安装在子目录的typecho网站直接使用根目录的伪静态规则,那么就会出现前台文章打开显示404 Not Found,登陆typecho网站后台也显示404 Not Found的情况,因此子目录的typecho站点要正常访问就要添加对应的伪静态规则,下面的伪静态规则博客吧亲测可用于安装在子目录的typecho站点。

子目录typecho站点伪静态规则

1
2
3
4
5
location /foldername/ {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /foldername/index.php$1 last;
    }
}

把上面伪静态规则中的foldername修改为子目录名称。

以上是关于nginx的伪静态rewrite规则,匹配栏目目录没有斜杠不能访问的主要内容,如果未能解决你的问题,请参考以下文章

nginx配置url重写

Nginx Rewrite(伪静态)

destoon-nginx模版绑定二级域名的伪静态规则之一

Nginx伪静态规则怎么设置

nginx伪静态问题

如何配置thinkphp的伪静态重写