2013-04-23 81 views
8

我想请求重定向到nginx的HTTPS,除非它的形式是HOST/ANY_STRING_OF_CHARS/END_OF_URI,例如:nginx使用负面正则表达式重写URL?

http://host.org/about#没有重定向

http://host.org/users/sign_in#重定向到https://host.org/users/sign_in

这显然在阿帕奇工作,但我不明白如何爆炸工程(忽略,如果它不真的工作):

RewriteRule !/([a-z]+)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

如何在nginx重写规则中执行此操作?这不是工作,我会希望:

rewrite !/([a-z]+)$ https://$server_name$request_uri redirect; 

这并不做任何重定向,万一我有倒退的逻辑:

rewrite /([a-z]+)$ https://$server_name$request_uri redirect; 

帮助吗?

+0

http://stackoverflow.com/a/39549548/1642018 – AMB 2017-02-18 07:04:53

回答

20

发送永久重定向到客户端:

server { 
    listen 80; 
    rewrite ^(/users/\w+)$ https://$host$1 permanent; 
    ... 
} 

负的比赛,你可以使用:

if ($request_uri !~ "^/users/\w+$") 
{ 
    return 301 https://$host$request_uri; 
} 
+0

谢谢为了这。我正在寻找一个否定匹配,即针对特定模式不重定向,针对_everything_ else重定向,而不仅仅是具有/ users /的请求。好的呼叫'永久',我应该这样做。 – kbighorse 2013-04-23 06:15:01

+0

我为您添加了否定匹配。 – Jack 2013-04-23 11:51:23

+0

谢谢!而不是地点区块的奖励积分?我听说这比如果,不是吗? – kbighorse 2013-04-24 18:13:57

1
set $test "0"; 
if ($request_uri ~ "condition") { 
    set $test "1"; 
} 
if ($test ~ "0") { 
    return 301 redirect url; 
}