,location /example/ {, rewrite ^/example/(.*)$ /$1 break;,},`,,2. 将子目录重写为另一个子目录:,`,location /old/ {, rewrite ^/old/(.*)$ /new/$1 break;,},`,,3. 将子目录重写为外部链接:,`,location /link/ {, rewrite ^/link/(.*)$ http://www.example.com/$1 redirect;,},``以下是Nginx子目录rewrite的几个实例:
实例一:基本重写规则
假设需要将访问/old_subdir的请求自动重写到/new_subdir,可以使用以下配置:

location /old_subdir {
rewrite ^/old_subdir(/.*)$ /new_subdir$1 last;
}
在这个例子中,rewrite指令匹配以/old_subdir开头的URL,并将其重写为以/new_subdir开头的新URL。$1表示第一个括号内的匹配项,即/.部分,用于保留原始URL中的路径信息。last关键字指示完成此次重写。
实例二:基于正则表达式的重写
如果需要更复杂的匹配和替换操作,可以使用正则表达式,将URL/photo/123456 重定向到/path/to/photo/12/1234/123456.png:
location /photo {
rewrite "/photo/([09]{2})([09]{2})([09]{2})" /path/to/photo/$1/$1$2/$1$2$3.png last;
}
在这个例子中,rewrite指令使用正则表达式匹配URL,并将匹配的部分分别用$1、$2和$3表示,然后进行相应的替换。
实例三:基于文件及目录匹配的重写
可以根据文件或目录的存在情况进行URL重写,当访问的文件和目录不存在时,重定向到某个PHP文件:
location / {
if (!e $request_filename) {
rewrite ^/(.*)$ /index.php last;
}
}
在这个例子中,if指令检查请求的文件或目录是否存在,如果不存在,则使用rewrite指令将请求重定向到index.php。
实例四:基于客户端IP的重写
根据客户端的IP地址进行不同的URL重写,如果客户端使用的是IE浏览器,则重定向到/ie目录下:
location / {
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /ie/$1 break;
}
}
在这个例子中,if指令检查用户代理字符串是否包含MSIE,如果是,则使用rewrite指令将请求重定向到/ie目录下。
实例五:禁止访问多个目录
可以配置Nginx来禁止访问某些目录,禁止访问/cron和/templates目录:
location ~ ^/(cron|templates)/ {
deny all;
break;
}
在这个例子中,location指令使用正则表达式匹配以/cron或/templates开头的URL,并使用deny all指令拒绝所有请求。
实例六:设置某些类型文件的浏览器缓存时间
可以为某些类型的文件设置浏览器缓存时间,为图片和CSS文件设置缓存时间为30天:
location ~* \.(jpg|jpeg|gif|png|css)$ {
expires 30d;
}
在这个例子中,location指令匹配以特定扩展名结尾的文件,并使用expires指令设置浏览器缓存时间为30天。
相关问答FAQs
问题一:如何在Nginx中实现永久重定向?
答:在Nginx中,可以使用rewrite指令结合permanent标记来实现永久重定向,将URL/old_page 永久重定向到/new_page:
rewrite ^/old_page$ /new_page permanent;
在这个例子中,rewrite指令将匹配/old_page的请求,并将其永久重定向到/new_page,浏览器会更新其书签和历史记录以反映新的URL。
问题二:如何防止盗链?
答:可以通过配置Nginx来防止盗链,只允许特定的Referer访问资源:
location ~* \.(jpg|jpeg|gif|png)$ {
valid_referers none blocked *.example.com *.example.org;
if ($invalid_referer) {
return 403;
}
}
在这个例子中,valid_referers指令定义了允许的Referer列表,如果请求的Referer不在列表中,则返回403状态码。