【问题标题】:nginx subdomain rewritenginx子域重写
【发布时间】:2011-01-30 17:17:19
【问题描述】:

我需要一个 nginx 重写规则来重写:

http://some-keyword.example.comwww.example.com/keyword.php?keyword=$some-keyword

虽然前面没有www 的域仍会重写为www.example.com 并且www 不被视为关键字。

请你帮我解决这个问题,这两条规则怎么写?

【问题讨论】:

  • 你说重写(如在服务器端,代理重写)但听起来你的意思是重定向?在重定向时,用户可见的 URL 会发生变化。在代理重写时,这一切都发生在服务器端,用户不可见。
  • 我的意思是重写,用户应该看到的是keyword.example.comConny

标签: regex nginx mod-rewrite


【解决方案1】:

如果你的意思是重定向,那么:

server {
  server_name ~^(.*)\.example\.com$ ;

  rewrite ^ http://www.example.com/keyword.php?keyword=$1 redirect;
}

如果是 rewrite 那么只需做

server {
  server_name example.com ~^(.*)\.example\.com$ ;

  rewrite ^ /keyword.php?keyword=$1 break;

#  location /keyword.php {
#    ....
#  }
}

【讨论】:

  • 即使问题与重写有关,您的示例也不会像应有的那样排除“www”。您需要为此添加一个负前瞻结构:` ^((?!www\.).*)\.example\.com$ `
  • 配置应该没问题,没有负前瞻,因为 Nginx 具有服务器搜索顺序,因此全名(www.example.com)位于正则表达式之前。
  • 我也有类似的问题,但是这个解决方案似乎并没有重写主机。在 OP 中,他要求服务器在规则完成后处理 www.example.com/keyword.php?keyword=$1 ,但这似乎只重写了路径和查询。有没有办法在内部重写主机?我只看到了使用重定向的例子,我所有的实验都失败了。谢谢。
  • 你不能rewrite主机。但你可以代理它。
  • server_name ~^(?.*)\.example\.com$ ;
【解决方案2】:
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&p=$3 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-price-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&price=$3 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=1 last;
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=$4 last;

【讨论】:

  • 这并没有回答他的问题。也许你回答错了问题?
【解决方案3】:

如果可能的话,我只会创建 1 个服务器(虚拟主机),这是普通的 domain.com/www.domain.com,然后使用 conf 将其余部分重写给他们

server {
    server_name domain.com www.domain.com;
    # normal handling for files
}

server {
    server_name ~(?<subdomain>[^\.]*).domain.com;
    location / {
        try_files keyword.php?keyword=$subdomain =404;
    }
}

如果我遗漏了什么,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2022-01-25
    • 2012-08-09
    • 1970-01-01
    • 2012-05-19
    相关资源
    最近更新 更多