,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状态码。