nginx

2013-07-19 38 views
17

'daki bir alt dizinin kök adresini yeniden yazabilirim mediawiki sitemi, php için arka uçta apache içeren statik dosyalar için bir önyüz olarak kullanmak için mediawiki sitemi dönüştürüyorum. "Example.com" adlı kök dizini görüntülediğimde ve bu dizini devre dışı bıraktığım için 403 hata veriyor ve orada bir dizin dosyası bulunmadığı sürece, şu ana kadar çalışan her şeyi aldım.nginx

RewriteRule ^$ /wiki/Main_Page [L] 

ben nginx bir konum yönergesi ile benzer bir şey çalıştı, ancak işe yaramıyor:

şu anda yerinde var apache yeniden yazma kuralı

basitçe

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

geri kalanı konumum direktifler şunlardır:

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; 
} 

sadece başlığıyla bir index.php dosyası koyabilirsiniz ('Locat İyon: ') bunun içinde, ancak bir yeniden yazma kuralıyla düzgün bir şekilde yapmak isterim.

Nginx ile mediawiki komutunu çalıştırmak için çevrimiçi olarak bulduğum tüm örnekler, wiki'yi wiki.example.com yerine bir/wiki/altdizini olarak çalıştırır.

Düzenleme: Ayrıca, aynı 403 hatayla karşılaşan try_files: try_files $uri $uri/ @rewrite /wiki/Main_Page; eklemeyi de denedim.

cevap

27

Nginx irc sohbetinde yardım buldum.

Temel olarak yapmam gereken şey, yeniden yazmak yerine geri dönüş kullanmaktı. Buna

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

: Yani bu değişti

location =/{ 
    return 301 http://www.example.com/wiki/Main_Page; 
} 
0
  1. emin olun "/wiki/Main_Page" olabilir başarıyla sunucu bölümünde
  2. Kontrolü erişilen vardır hayır küresel yeniden yazma kuralları. Sunucu bölümündeki yeniden yazma kuralları konum bölümünden önce yürütülür. Böyle konumu bölümünde
  3. kullanma yeniden yazma kuralları:

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

dikkat burada "mola". Yeniden yazma döngüsünü bozar.

Bu sayfa arka uç sunucusunda bulunuyorsa, burada proxy_pass kullanılmalıdır.

0

kullandığınız cevap bir /wiki konuma / konumu atlamak yapım yönlendirme olan, Bu deneyebilirsiniz yerine bu tercihim / URI

+0

Bu kodu nereye yazmalıyım? –

+0

@Pankajkatiyar Sunucu bloğunuzda –

8

sunucu Main_Page gerektiği

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

Kullanılacak yöntem:

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

Aynı fikir olduğu için kabul edilen yanıtı geliştirmek daha yararlı olmaz mı? –