2015-10-02 64 views
0

我的問題是與NginX ANF如果(我知道如果是邪惡的,但我需要使用它)。 我想在兩種情況下重定向到我的網站的用戶。如果他們的IP匹配,並且網址正確www.domain.comNginx重定向如果URL等於

基地是我有一個具有2個IP和2個域的網絡服務器。一個用於英語,一個用於當地語言。我想用本地IP將所有人重定向到本地域。 (從domain.com到domain.hu)

我到目前爲止所做的工作:我已經安裝了帶IP2Location的NginX,它的工作原理就像一個魅力。這是我的「如果」 nginx.conf

if ($ip2location_country_short ~ ^HU$) 
      { 
      set $my_var1 "${my_var1}B"; 
      } 
    if ($request_uri ~ .*wonder*.*) 
      { 
      set $my_var1 "${my_var1}C"; 
      } 
    if ($my_var1 = ABC) 
      { 
      #rewrite ^/(.*)$ http://www.domain.hu last; 
      } 

我想實現的是部分:使用一個名爲$ my_var1變量,並用它來決定,如果我需要將用戶重定向或不。我已經在第一名中將它設置爲「A」。 第一種情況:如果用戶來自匈牙利,則使$ my_var1等於「AB」。接下來,我想檢查用戶是否在瀏覽器中寫入了ENG或HU URL。如果他寫了www.domain.com的確切URL,我想重定向用戶。如果他這樣做了,那麼我將我的$ my_var1設置爲「ABC」。而在第三種情況下,如果$ my_var1的值等於「ABC」,則重定向。

我的問題是:我不知道如何檢查URL。我在寫入PHP文件以在進入站點後向我顯示$ my_var1的值時發現了這個問題,結果$ my_var1 os的值始終只是「AB」。我無法檢查網址。你能給我一個描述如何檢查URL conataining文本/等於

+2

'但是我需要使用it'我敢打賭,你不知道。由於您正在檢查request_uri是否包含wonde [r] *,並且還表示他們必須請求確切的URL'www.domain.com /',因此您不確定要執行什麼操作? - 如何在邏輯上匹配兩者條件?你現在也正處於「如果是邪惡」的情況下,警告不要這樣做。「如果在位置上下文中可以完成的唯一100%安全的事情是最後返回並重寫」。 – AD7six

+0

另外明顯的第一步是有2個服務器塊 - 你應該把你的**整個** nginx服務器配置在問題中。 – AD7six

+0

嗯,我想谷歌和request_uri是我發現檢查用戶鍵入的URL。主要目標是將每個來自匈牙利的用戶從domain.com重定向到domain.hu。如果我只檢查IP,那麼它會進入重定向圈,無法工作。這就是爲什麼我儘管我會檢查URL以及重定向用戶,只有當他來自匈牙利,他寫了錯誤的URL(domain.com)。這個奇蹟只是domain.com的一部分 – Bert

回答

1

完成!

set $my_var A; 

    if ($ip2location_country_short ~ ^HU$) 
      { 
      set $my_var "${my_var}B"; 
      } 
    if ($http_host ~ .*domain.com.*) 
      { 
      set $my_var "${my_var}C"; 
      } 
    if ($my_var = "ABC") 
      { 
      rewrite ^/(.*)$ http://domain.hu last; 
      } 

沒想到它會這麼容易.....