history路由为什么nginxnginx 404 重定向向到index

7427人阅读
1、假设要把webroot/static/index.html访问重定向到static/index.html
例如当我们通过浏览器访问http://192.168.11.210/webroot/static/index.html,实际访问的是web目录下面的static/index.html文件,也及去掉了webroot这个目录,使用alias
location ^~ /webroot/ {
alias /data/www/web/WebContent/;
1. 使用alias时,目录名后面一定要加&/&。
2. alias可以指定任何名称。
3. alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
4. alias只能位于location块中。[/warning]
http://192.168.11.210/webroot/test/static/index.html
location ^~ /webroot/test/ {
alias /data/www/web/WebContent/;
}这样也是可以的,最终访问的文件跟上面是一样的。
2、把对webroot/static/index.html的访问重定向到web目录下面的test目录下
location ~ ^/webroot/ {
root /data/www/web/WebContent/test/;
}http://192.168.11.210/webroot/static/index.html 实际访问的是web目录下testwebroot/static/index.html
及使用root一般是把访问目录重定向到某个目录下,但是访问的路径必须在重新定位的目录下
注意区分跟alias的区别
转载一个:
访问域名&&
&&自动跳转到&&&&
这个如何写
这种需求有多种方法可以实现:
1. 利用Nginx rewrite 内部跳转实现: & & &&
location /image {
& & & & & rewrite ^/image/(.*)$ & & /make/image/$1
2.利用alias映射
location &/image &{
& & & &alias &/make/ &#这里写绝对路径
3.利用root映射:
location &/image {
& & & root & /
4.利用nginx的permanent 301绝对跳转实现
location /image {
& & & & rewrite ^/image/(.*)$ & /make/image/$1;
5.判断uri实现
if ( $request_uri ~* ^(/image)){
& & & & rewrite ^/image/(.*)$ /make/image/$1&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1012119次
积分:13875
积分:13875
排名:第766名
原创:358篇
转载:152篇
译文:60篇
评论:274条
文章:13篇
阅读:11107
文章:46篇
阅读:16324
文章:14篇
阅读:38309
文章:13篇
阅读:80413
(1)(1)(2)(6)(17)(19)(49)(2)(5)(2)(2)(2)(3)(2)(5)(27)(77)(44)(7)(1)(6)(23)(12)(13)(5)(6)(5)(3)(4)(5)(23)(6)(1)(1)(4)(13)(6)(7)(3)(3)(1)(22)(9)(6)(13)(12)(24)(22)(26)(10)nginx伪静态重定向干货分享 - 推酷
nginx伪静态重定向干货分享
在网站建设中需要网页重定向的情况很多:如网页目录结构变动、网页重命名、网页的扩展名改变、网站域名改变等。如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个404错误信息页面降低了用户体验度,导致访问流量白白丧失。不仅如此,之前该页面的一切积累(比如PR值)就都白费了。
WebServer的301重定向不仅能使页面实现自动跳转,对于搜索引擎来说,也可以传递PR值。
案例一:将多个域名指向同一web目录
rewrite ^/$ /
案例二:将不带www的域名301转向到带www的域名
  if ( $host != && ) {
   rewrite ^/(.*)$ /$1
nginx重定向规则详细介绍
rewrite命令
nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下:
rewrite 正则表达式 替换目标 flag标记
  flag标记可以用以下几种格式:
  last – 基本上都用这个Flag。
  break – 中止Rewirte,不在继续匹配
  redirect – 返回临时重定向的HTTP状态302
  permanent – 返回永久重定向的HTTP状态301
例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:
location /download/ {
   rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.
nginx重定向的IF条件判断
在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种:
正则表达式
~ 为区分大小写匹配; !~为区分大小写不匹配
  ~* 为不区分大小写匹配;!~为不区分大小写不匹配
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
   rewrite ^(.*)$ /nginx-ie/$1
文件和目录判断
-f和!-f判断是否存在文件
  -d和!-d判断是否存在目录
  -e和!-e判断是否存在文件或目录
  -x和!-x判断文件是否可执行
例如下面设定nginx在文件和目录不存在的时候重定向:
if (!-e $request_filename) {
   proxy_pass http://127.0.0.1/;
return 返回代码
返回http代码,例如设置nginx防盗链:
location ~* \.(gif|jpg|png|swf|flv)$ {
  valid_referers none blocked / http://www.markdream.cc/;
  if ($invalid_referer) {
   return 404;
301重定向方法
进行了301重定向,把和合并,并把之前的域名也一并合并. 有两种实现方法,第一种方法是判断nginx核心变量host(老版本是http_host):
  server {
  server_;
  rewrite ^/(.*) /$1
nginx rewrite伪静态配置参数详细说明
正则表达式匹配
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向 地址栏会显示跳转后的地址
* permanent 返回301永久重定向 地址栏会显示跳转后的地址
一些可用的全局变量有,可以用做条件判断
$content_length
$content_type
$document_root
$document_uri
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$server_protocol
$server_addr
$server_name
$server_port
结合QeePHP的例子
if (!-d $request_filename) {
rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3
rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1
多目录转成参数
#/sort/2 =& /index.php?act=sort&name=abc&id=2
if ($host ~* (.*)\.domain\.com) {
set $sub_name $1;
rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1
#123456/xxxx -& /xxxx?id=123456
rewrite ^/(\d+)/(.+)/ /$2?id=$1
#例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1
目录自动加“/”
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/
禁止htaccess
location ~/\.ht {
禁止多个目录
location ~ ^/(cron|templates)/ {
禁止以/data开头的文件
#可以禁止/data/下多级目录下.log.txt等请求;
location ~ ^/data {
禁止单个目录不能禁止.log.txt能请求
location /searchword/cron/ {
禁止单个文件
location ~ /data/sql/data.sql {
给favicon.ico和robots.txt设置过期时间
#这里为favicon.ico为99 天,robots.txt为7天并不记录404错误日志
location ~(favicon.ico) {
expires 99d;
location ~(robots.txt) {
expires 7d;
设定某个文件的过期时间;这里为600秒,并不记录访问日志
location ^~ /html/scripts/loadhead_1.js {
root /opt/nginx/
expires 600;
文件反盗链并设置过期时间
#这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求
#rewrite ^/ /leech.显示一张防盗链图片
#access_ 不记录访问日志,减轻压力
#expires 3d 所有文件3天的浏览器缓存
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *. *.markdream.net localhost 208.97.167.194;
if ($invalid_referer) {
rewrite ^/ /leech.
return 412;
root /opt/lampp/htdocs/
expires 3d;
只允许固定ip访问网站,并加上密码
root /opt/htdocs/
allow 208.97.167.194;
allow 222.33.1.2;
allow 231.152.49.4;
auth_basic &C1G_ADMIN&;
auth_basic_user_
将多级目录下的文件转成一个文件,增强seo效果
#/job-123-456-789.html 指向/job/123/456/789.html
rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.
将根目录下某个文件夹指向2级目录
#如/shanghaijob/ 指向 /area/shanghai/
#如果你将last改成permanent,那么浏览器地址栏显是 /location/shanghai/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2
上面例子有个问题是访问/shanghai 时将不会匹配
rewrite ^/([0-9a-z]+)job$ /area/$1/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2
这样/shanghai 也可以访问了,但页面中的相对链接无法使用,如./list_1.html真实地址是/area /shanghia/list_1.html会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/
知道原因后就好办了,让我手动跳转吧
rewrite ^/([0-9a-z]+)job$ /$1job/
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2
文件和目录不存在的时候重定向:
if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
listen 80;
index index.html index.htm index.
root /opt/nginx/
rewrite ^/ /;
多域名转向
server_name
www.markdream.
index index.html index.htm index.
root /opt/lampp/
if ($host ~ &markdream\.net&) {
rewrite ^(.*) $1
三级域名跳转
if ($http_host ~* &^(.*)\.i\.markdream\.com$&) {
rewrite ^(.*) $1;
listen 80;
index index.html index.htm index.
root /opt/lampp/htdocs/
rewrite ^/(.*) /$1
某个子目录作镜向
location ^~ /zhaopinhui {
rewrite ^.+ /
#discuz ucenter home (uchome) rewrite
rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2
rewrite ^/(space|network)\.html$ /$1.
rewrite ^/([0-9]+)$ /space.php?uid=$1
discuz 7 rewrite
rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2
rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3
rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3
rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2
给discuz某版块单独配置域名
location = / {
if ($http_host ~ news\.$) {
rewrite ^.+ /forum-831-1.
discuz ucenter 头像 rewrite 优化
location ^~ /ucenter {
location ~ .*\.php?$
#fastcgi_pass unix:/tmp/php-cgi.
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.
include fcgi.
location /ucenter/data/avatar {
location ~ /(.*)_big\.jpg$ {
error_page 404 /ucenter/images/noavatar_big.
location ~ /(.*)_middle\.jpg$ {
error_page 404 /ucenter/images/noavatar_middle.
location ~ /(.*)_small\.jpg$ {
error_page 404 /ucenter/images/noavatar_small.
expires 300;
选择跳转目录到域名
#/news/te111.html --&/te111.html
#排除dongtai、about文件夹
location / {
if ($request_uri !~ ^/(dongtai|about)/) {
rewrite /(\w*)/(.*) http://$/$2
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致如何在NGINX中重定向一个网址(301 跳转) | Howtoing运维教程
欢迎!登录到您的帐户
您的用户名
如何在NGINX中重定向一...

我要回帖

更多关于 nginx 404 重定向 的文章

 

随机推荐