Nginx目录Rewrite伪静态目录自动加斜线的方法
今天配置Nginx时,我设置了一个域名: http://www.226500.cn ,下面有web目录为www;现在的问题就是如果我访问 http://www.226500.cn/www/ 就可以显示出地址,但如果我访问 http://www.226500.cn/www 结果却提示说找不到所需要的页面。哈哈,又开始犯老错了,nginx不会自动在请求的最后加上一个/的,原因是nginx不会自动判断请求的是一个文件还是一个目录,解决方法为:
在配置文件中location里加入如下代码
if (-d $request_filename) {
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}这样再对 http://www.226500.cn/www 请求,nginx就会进行判断了,如果请求的是一个文件夹,会自动在最后加上/符号,如果请求的是一个文件,则不会改变原有url
接下来对这段代码进行一个解释
1、if (-d $request_filename),如果请求的是一个文件夹,则为真,进到if语句中执行
2、rewrite是执行url重写操作
3、^/(.*)([^/])$表示以/符号开始并紧跟着任何字符,同时不是以/为结束的字符串,在我的url中,(.*)表示的ww,([^/])表示的w
4、 http://$host/$1$2/ 表示的重写后的地址,$host是请求的域名,$1是前面第一个括号里的内容ww,在我的url里就是wordpres $2是前面第二个括号里的内容,在我的url里是w
5、permanent表示,返回永久重定向的HTTP状态301※这里值得一说的是,抚琴煮酒浏览IE的习惯一般是 http://www.226500.cn/www ,相信大家习惯跟我一样,不会在www后面加上/的;在为客户设计网站时,首页不考虑这些问题,但牵涉到二级目录时,我一般会加上以上正则,这样会使整个网站设计更人性化点。
rewrite的伪静态语句RewriteRule ^/(.*)([^/])$ http://$host/$1$2/ permanent
这样的好处是 用文件虚拟目录的时候不会出错!