2013-07-19 30 views
17

我正在將我的mediawiki網站轉換爲使用nginx作爲前端用於php的後端上apache的靜態文件的前端。到目前爲止,除了當我查看根目錄「example.com」時它嘗試提供目錄列表並給出403錯誤,因爲我已禁用並且沒有索引文件。將根地址重寫爲nginx中的子目錄

的阿帕奇重寫規則我在的地方,現在很簡單:

RewriteRule ^$ /wiki/Main_Page [L] 

我試圖在nginx的位置指令類似的東西,但它不工作:

location =/{ 
    rewrite "^$" /wiki/Main_Page; 
} 

其餘我的位置指令是:

location/{ 
    try_files $uri $uri/ @rewrite; 
} 

location @rewrite { 
    rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args; 
} 

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { 
    try_files $uri /w/index.php?title=$1&$args; 
    expires max; 
    log_not_found off; 
} 

location ~ \.php?$ { 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header Host $host; 
    proxy_pass http://127.0.0.1:8080; 
} 

我可以簡單地將一個index.php文件與標題('Locat離子:')在裏面,但我寧願用一個重寫規則正確地做。

所有的例子,我在網上找到了運行nginx的鏈接到MediaWiki運行的wiki作爲wiki.example.com而非/維基/子目錄。

編輯:我也想加入到這樣的try_files:try_files $uri $uri/ @rewrite /wiki/Main_Page;用相同的403錯誤的結果。

回答

27

我在nginx irc聊天中找到了幫助。

基本上我需要做的是使用返回而不是重寫。所以我改變了這一點:

location =/{ 
    rewrite "^$" /wiki/Main_Page; 
} 

這樣:

location =/{ 
    return 301 http://www.example.com/wiki/Main_Page; 
} 
0
  1. 確保 「/維基/ Main_Page」 可以成功訪問
  2. 檢查服務器部分,沒有全球重寫規則。服務器部分的重寫規則將在位置部分之前執行。在這樣的位置部分
  3. 使用重寫規則:

    location =/{ 
        rewrite "^.*$" /wiki/Main_Page break;  
    } 
    

注重 「破發」 在這裏。意味着打破重寫週期。

如果此頁面位於後端服務器,則應使用proxy_pass。

0

你使用的答案是重定向,讓你跳過/位置到/wiki位置,你可以試試這個,而不是

location =/{ 
    rewrite^/w/index.php?title=Main_Page&$args last; 
} 

這應該服務器Main_Page爲/ URI

+0

應該在哪裏我寫這篇文章的代碼? –

+0

@Pankajkatiyar在你的服務器塊 –

8

我喜歡使用方法:

location =/{ 
    return 301 http://$host/wiki/Main_Page; 
} 
+1

是不是更有助於提高接受的答案,因爲有相同的想法? –