我在这里寻找一个nginx noob的小build议。 我一直在阅读,如果语句在nginx方式慢,所以我希望在转换这些一些帮助。 我尝试了一堆不同的方法,所有的失败,所以我想我会抛出一个问题。
server_name *.noconformity.co noconformity.co; # remove all sub domains and www if ($http_host !~* "^(ftp|ssh)\.noconformity\.co$"){ set $rule_0 1$rule_0; } if ($http_host ~ "^([^.]+)\.noconformity\.co$"){ set $rule_0 2$rule_0; } if ($rule_0 = "21"){ rewrite ^/(.*)$ http://noconformity.co/$1 permanent; break; } # Login Short Cut if ($uri ~* "/login") { rewrite ^/login(/.*)? /wp-admin$1; }
完全未经testing – 很可能有错误 – 但希望这个概念是有效的。
下面的configuration是基于我的解释你的目标是:redirect所有子域,除了“ftp”和“ssh”到主站点; redirect/login到/ wp-admin
创build一个服务器块来接受到ftp和ssh子域的连接 – 然后在这里做一些事情(比如拒绝,或者返回403等) – 因为这是一个静态server_name,所以它优先于通配符server_name。
server { server_name ftp.noconformity.co ssh.noconformity.co; #additional options }
您的主服务器块 – 将您的重写添加到位置块
server{ server_name noconformity.co; #root ....; #your main config location ~* /login/ { rewrite ^/login/(.*)? /wp-admin$1; } }
{我不得不改变/login/重写,以避免陷入循环与内置的WP日志redirect}
最后,通配符server_name – 这将匹配任何子域(除了那些已经匹配的),捕获path,并重写到您的主站点。
server { server_name *.noconformity.co; rewrite ^/(.*)$ http://noconformity.co/$1 permanent; }
server_names上的nginx 页面值得一读,因为它解释了不同server_nameexpression式的优先级。
这个问题的更好的答案是使用HTTP映射模块 。 上面的例子与他们所演示的几乎一样。 更清洁,更容易pipe理。