2013-07-19 13 views
17

Konwertuję moją stronę mediawiki, aby używać nginx jako nakładki dla plików statycznych z apache na zapleczu dla php. Do tej pory wszystko działało, z wyjątkiem sytuacji, gdy przeglądam katalog główny "example.com", który próbuje wyświetlić listę katalogów i daje błąd 403, ponieważ mam to wyłączone i nie mam tam pliku indeksu.Przepisanie adresu root do podkatalogu w nginx

Apache reguła przepisywania mam w miejscu teraz jest po prostu:

RewriteRule ^$ /wiki/Main_Page [L] 

Próbowałem coś podobnego z dyrektywy lokalizacji w nginx, ale to nie działa:

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

Reszta Moje dyrektywy dotyczące lokalizacji to:

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

Mogę po prostu umieścić plik index.php z nagłówkiem ("Locat ion: ') w tym, ale wolałbym zrobić to właściwie z regułą przepisywania.

Wszystkie przykłady, które znalazłem w Internecie do uruchamiania mediawiki z nginxem, uruchamiają wiki jako wiki.example.com zamiast podkatalogu/wiki /.

Edytuj: Próbowałem również dodać do try_files w ten sposób: try_files $uri $uri/ @rewrite /wiki/Main_Page; z tym samym wynikiem błędu 403.

Odpowiedz

27

Znalazłem pomoc w czacie nginx irc.

Zasadniczo musiałem użyć zwrotu zamiast przepisać. Więc zmieniłem to:

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

do tego:

location =/{ 
    return 301 http://www.example.com/wiki/Main_Page; 
} 
0
  1. Upewnij "/wiki/Main_Page" może być z powodzeniem obejrzano
  2. sprawdzić w sekcji serwera, nie ma globalne reguły przepisywania. Przepisz reguły w sekcji serwera zostaną wykonane przed sekcją lokalizacji.
  3. używając reguł przepisywania w sekcji lokalizacji tak:

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

zwracać uwagę "break" tutaj. Oznacza przerwać cykl przepisywania.

Jeśli ta strona znajduje się na serwerze zaplecza, tutaj powinno używać proxy_pass.

0

Odpowiedź użyłeś jest przekierowanie, dzięki czemu można pominąć / lokalizacji do /wiki miejscu, można spróbować to zamiast

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

Powinno to serwer z Main_Page dla / URI

+0

Gdzie powinienem napisać ten kod? –

+0

@Pankajkatiyar w swoim bloku serwera –

8

wolę używać:

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

nie jest to bardziej pomocne w ulepszeniu zaakceptowanej odpowiedzi, skoro istnieje ten sam pomysł? –

Powiązane problemy