2009-07-07 8 views
18

Używam nginx 0.6.32 jako front-end dla serwera proxy dla couchdb. Mam plik robots.txt w bazie danych, dostępny jako http://www.example.com/prod/_design/mydesign/robots.txt. Mam również plik sitemap.xml, który jest generowany dynamicznie pod podobnym adresem URL.Jak skonfigurować Nginx do przekierowania do adresu URL pliku robots.txt i sitemap.xml

Próbowałem następujące config:

server { 
    listen 80; 
    server_name example.com; 
    location/{ 
    if ($request_method = DELETE) { 
    return 444; 
    } 
    if ($request_uri ~* "^/robots.txt") { 
    rewrite ^/robots.txt http://www.example.com/prod/_design/mydesign/robots.txt permanent; 
    } 

    proxy-pass http://localhost:5984; 
    proxy_redirect off; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 

To wydaje się działać jak przekierowanie, ale czy istnieje prostszy sposób?

Odpowiedz

49

Albo można po prostu umieścić go w swoim miejscu -

location /robots.txt { 
    alias /Directory-containing-robots-file/robots.txt; 
} 
+1

To wydaje się najprostsze rozwiązanie i działa idealnie dla mnie. – Gattster

+3

Kiedy mówisz "plik zawierający plik", zakładam, że masz na myśli * włączając * nazwę pliku? Próbowałem 'alias/www/static;', zi bez końcowych ukośników, i to się nie udało. Kiedy użyłem 'alias /www/static/robots.txt;', działało dobrze. –

+1

John C - Nie, tylko katalog. zamiast wstawiać 'alias/katalog;' możesz również umieścić 'root/opt/directory /;' Hope, który pomaga. – PlanetUnknown

5

Przepisanie z http: // ... jest przeznaczone do wykonania przekierowania. Prawdopodobnie szukasz:

 
rewrite ^/robots.txt /prod/_design/mydesign/robots.txt last; 
+0

potrzeby równa pracy: 'Location = /sitemap.xml { \t przepisywania ^/Mapa strony \. xml $ /index.php?xxxxxxxxx permanent; } ' –

1

Pamiętaj, że pierwszy parametr jest wyrażeniem regularnym, więc prawdopodobnie powinieneś uciec. i dopasuj koniec linii.

location/{ 
    rewrite ^/robots\.txt$ /static/robots.txt last; 
    ... 
} 

NginxHttpRewriteModule

3

To powinno działać również i może wykonać nieco lepiej.

location /robots.txt { alias /var/www/django/mysite/static/robots.txt; } 
18

Myślę, że chcesz ustawić lokalizację. Kluczową częścią jest dyrektywa "=".

location = /robots.txt { 
    alias /your_full_path/robots.txt ; 
} 

(Kiedy nie zawierają =, to nadal udał się do domyślnej lokalizacji głównego nginx)

Ustawienie to jak poniżej, spowodowałoby wszystkie /robots.txt* wnioski należy odczytywać z/var/foo. Więc /robots.txt.bing próbuje odczytać /var/foo/robots.txt.brania z dysku. "^ ~" Oznacza, że ​​jest to dopasowanie wyrażenia regularnego na początku żądania.

location ^~ /robots.txt { 
    root /var/foo; 
} 
0

Zważywszy, że robots.txt znajduje się /var/www/mysite/static/robots.txt, następujące pracował dla mnie:

location = /robots.txt { 
    root /var/www/mysite/static/; 
} 
Powiązane problemy