2013-04-23 51 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; 
}