2009-07-07 13 views
18

Sto eseguendo nginx 0.6.32 come front-end proxy per couchdb. Ho il mio robots.txt nel database, raggiungibile come http://www.example.com/prod/_design/mydesign/robots.txt. Ho anche il mio sitemap.xml che viene generato dinamicamente, su un URL simile.Come configurare nginx per reindirizzare a un URL per robots.txt e sitemap.xml

ho provato quanto segue 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; 
} 

Questo sembra funzionare come un reindirizzamento, ma c'è un modo più semplice?

risposta

49

Oppure si può mettere semplicemente nella sua posizione -

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

Questa sembra la soluzione più semplice e funziona perfettamente per me. – Gattster

+3

Quando dici 'directory-contenente-file', presumo tu intenda * incluso * il nome file? Ho provato "alias/www/static;", con e senza barre finali, e non è riuscito. Quando ho usato "alias /www/static/robots.txt;", ha funzionato bene. –

+1

John C - No, solo la directory. invece di mettere "alias/directory;" puoi anche mettere "root/opt/directory /;" Spero che aiuti. – PlanetUnknown

5

riscrittura con http: // ... è intenzionato a eseguire il reindirizzamento. Probabilmente stai cercando:

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

esigenze uguale al lavoro: 'location = {/sitemap.xml \t riscrittura ^/Mappa del sito \. xml $ /index.php?xxxxxxxxx permanente; } –

1

Si noti che il primo parametro è un'espressione regolare, quindi probabilmente si dovrebbe scappare. e abbinare il fine della linea.

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

NginxHttpRewriteModule

3

Questo dovrebbe funzionare anche, e può eseguire un po 'meglio.

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

Penso che si desidera impostare una posizione. La parte chiave è la direttiva "=".

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

(quando non ho incluso i =, ancora andati alla posizione radice nginx predefinita)

impostazione è come qui di seguito, avrebbero causato tutte le richieste /robots.txt* da leggere fuori/var/foo. Quindi /robots.txt.bing prova a leggere /var/foo/robots.txt.bing al di fuori del disco. Il "^ ~" indica che si tratta di una corrispondenza di espressioni regolari all'inizio della richiesta.

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

Considerando che robots.txt si trova a /var/www/mysite/static/robots.txt, i seguenti ha lavorato per me:

location = /robots.txt { 
    root /var/www/mysite/static/; 
} 
Problemi correlati