2017-06-12 35 views
1

我幾乎可以工作,只是無法得到它的最後一英寸。nginx重寫了兩個url段

我試圖做的是

https://example.com/ap/variable1/variable2/

,並讓它去

https://example.com/ap/index.php?server= $ 1 &公會= $ 16

其中的變量是可選的。我現在已經是

location /ap/ { 
    rewrite "^/ap/(.*)/(.*)$" "/ap/index.php?server=$1&guild=$2" last; 
} 

這主要工作,如果我去與最終的URL削減它使兩個變量爲一個沒有它,它加載就好了。

如果我改變規則

location /ap/ { 
    rewrite "^/ap/(.*)/(.*)/$" "/ap/index.php?server=$1&guild=$2" last; 
} 

,我得到一個404試圖轉到第一個變量的時候,有沒有辦法讓我的蛋糕和熊掌兼得,我在這裏失蹤

回答

0

第一次捕獲是貪婪的,這意味着它將捕獲到最後的/(而不是您想要的第一個/)的所有內容。您可以通過使用*?而不是*來使捕獲非貪婪。

但是,如果捕獲不是爲了捕獲/,您應該使用[^/]字符類。例如:

rewrite ^/ap/([^/]*)/([^/]*)/?$ /ap/index.php?server=$1&guild=$2 last; 

尾隨/也被選爲可選。有關正則表達式,請參見this useful resource

+0

你是最棒的!只修復我不得不做的只是用引號 'rewrite「^/ap /([^ /] *)/([^ /] *)/?$」「/ap/index.php?server=$1 &公會= $ 2「最後;' – Tombomb

+0

'nginx'不需要引號,除非使用大括號。我認爲這是你的部署系統的一個限制。 –