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规则,匹配栏目目录没有斜杠不能访问的主要内容,如果未能解决你的问题,请参考以下文章