概述
wordpress固定链接修改之后
这一般都是需要url重写
Nginx
Nginx
rewrite
如果加上if语句,示例如下:
if
rewrite
Nginx与Apache的Rewrite规则实例对比
简单的Nginx和Apache
Apache
RewriteRule
RewriteRule
RewriteRule
RewriteRule
Nginx
rewrite
rewrite
rewrite
rewrite
由以上示例可以看出,Apache的Rewrite规则改为Nginx的Rewrite规则,其实很简单:Apache的RewriteRule指令换成Nginx的rewrite指令,Apache的[L]标记换成Nginx的last标记,中间的内容不变。
如果Apache的Rewrite规则改为Nginx的Rewrite规则后,使用nginx
rewrite
加上引号就正确了:
rewrite
Apache与Nginx的Rewrite规则在URL跳转时有细微的区别:
Apache
RewriteRule
Nginx
rewrite
以上示例中,我们注意到,Nginx
另外,Apache与Nginx的Rewrite规则在变量名称方面也有区别,例如:
Apache
RewriteRule
Nginx
rewrite
Apache与Nginx
Apache的RewriteCond指令对应Nginx的if指令;
Apache的RewriteRule指令对应Nginx的rewrite指令;
Apache的[R]标记对应Nginx的redirect标记;
Apache的[P]标记对应Nginx的last标记;
Apache的[R,L]标记对应Nginx的redirect标记;
Apache的[P,L]标记对应Nginx的last标记;
Apache的[PT,L]标记对应Nginx的last标记;
允许指定的域名访问本站,其他域名一律跳转到http://www.aaa.com
Apache
RewriteCond
RewriteCond
RewriteCond
RewriteRule
Nginx的if指令不支持嵌套,也不支持AND、OR等多条件匹配,相比于Apache的RewriteCond,显得麻烦一些,但是,我们可以通过下一页的Nginx配置写法来实现这个示例:
Nginx
if
if
if
}
rewrite
语法:
默认:
作用域:
This
这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。
Be
注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。
rewrite只是会改写路径部分的东东,不会改动用户的输入参数,因此这里的if规则里面,你无需关心用户在浏览器里输入的参数,rewrite后会自动添加的,因此,我们只是加上了一个?号和后面我们想要的一个小小的参数
nginx的rewrite规则参考:
~
~*
!~和!~*分别为区分大小写不匹配及不区分大小写不匹
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
last
break
redirect
permanent
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
结合QeePHP的例子
if
rewrite
rewrite
break;
多目录转成参数
abc.domian.com/sort/2
if
set
rewrite
}
目录对换
/123456/xxxx
rewrite
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if
rewrite
}
目录自动加“/”
if
rewrite
}
禁止htaccess
location
deny
}
禁止多个目录
location
deny
break;
}
禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;
location
deny
}
禁止单个目录
不能禁止.log.txt能请求
location
deny
}
禁止单个文件
location
deny
}
给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志
location
log_not_found
expires
break;
}
location
log_not_found
expires
break;
}
设定某个文件的过期时间;这里为600秒,并不记录访问日志
location
access_log
root
expires
break;
}
文件反盗链并设置过期时间
这里的return
“rewrite
“access_log
“expires
location
valid_referers
if
rewrite
return
break;
}
access_log
root
expires
break;
}
只充许固定ip访问网站,并加上密码
root
allow
allow
allow
deny
auth_basic
auth_basic_user_file
将多级目录下的文件转成一个文件,增强seo效果
/job-123-456-789.html
rewrite
将根目录下某个文件夹指向2级目录
如/shanghaijob/
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/
rewrite
上面例子有个问题是访问/shanghai
rewrite
rewrite
这样/shanghai
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯
(-d
if
rewrite
}
知道原因后就好办了,让我手动跳转吧
rewrite
rewrite
文件和目录不存在的时候重定向:
if
proxy_pass
}
域名跳转
server
{
listen
server_name
index
root
rewrite
access_log
}
多域名转向
server_name
index
root
if
rewrite
}
三级域名跳转
if
rewrite
break;
}
域名镜向
server
{
listen
server_name
index
root
rewrite
access_log
}
某个子目录作镜向
location
rewrite
break;
}
nginx是完全支持.htaccess文件的!
方法如下:
1. 在需要使用.htaccess文件的目录下新建一个.htaccess文件,
如本人的一个Discuz论坛目录:
vim/var/www/html/168pc/bbs/.htaccess
2. 在里面输入规则,我这里输入Discuz的伪静态规则:
#nginx
rewrite rule
rewrite ^(.*)/archiver/((fid|tid)-[w-]+.html)$$1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+).html$$1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$$1/viewthread.php?tid=$2&extra=page=$4&page=$3last;
rewrite ^(.*)/profile-(username|uid)-(.+).html$$1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+).html$ $1/space.php?$2=$3last;
rewrite ^(.*)/tag-(.+).html$ $1/tag.php?name=$2 last;
# end nginx rewrite rule
wq保存退出。
3. 修改nginx配置文件:
vim/etc/nginx/nginx.conf
4. 在需要添加伪静态的虚拟主机的server{}中引入.htaccess文件,如图所示:
include/var/www/html/168pc/bbs/.htaccess;(把这个改成你.htaccess文件的具体位置)
wq保存退出。
5. 重新加载nginx配置文件:
/etc/init.d/nginx reload
重新打开网页看看,如果伪静态正常就证明你的rewrite rule语法是正确的。
正常,完毕!
补充:偶在网上发现了个可以在线将Apache
http://www.anilcetin.com/convert-apache-htaccess-to-nginx/
此地址里面的内容包含可以完成上面说的略做修改的功能。就是把.htaccess中的规则自动转换成nginx下面可用的规则。
总结:.htaccess文件本来是apache专用的分布式配置文件,提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。其实修改一下,nginx也可使用.htaccess文件实现多种功能。实现伪静态只是.htaccess的其中一个用途,.htaccess还可以做很多的用途,如过滤访问IP,设置web目录访问权限、密码等。
最后
以上就是奋斗小懒虫为你收集整理的nginx rewrite配置的全部内容,希望文章能够帮你解决nginx rewrite配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复