2009-07-07 15 views
18

Estoy ejecutando nginx 0.6.32 como un proxy de front-end para couchdb. Tengo mi robots.txt en la base de datos, accesible como http://www.example.com/prod/_design/mydesign/robots.txt. También tengo mi sitemap.xml que se genera dinámicamente, en una url similar.¿Cómo configuro nginx para redirigir a una url para robots.txt y sitemap.xml

me han tratado la siguiente configuración:

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

Esto parece funcionar como una redirección, pero hay una manera más simple?

Respuesta

49

O usted puede poner simplemente en su propia ubicación -

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

Esto parece ser la solución más simple, y funciona perfectamente para mí. – Gattster

+3

Cuando dices 'directory-containing-file', supongo que quieres decir * incluyendo * el nombre de archivo? Intenté 'alias/www/static;', con y sin barras al final, y falló. Cuando usé 'alias /www/static/robots.txt;', funcionó bien. –

+1

John C - No, solo el directorio. en lugar de poner 'alias/directory;' también puede poner 'root/opt/directory /;' Espero que ayude. – PlanetUnknown

5

reescriba con http: // ... se intenta hacer la redirección. Probablemente estés buscando:

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

necesidades es igual al trabajo: 'location = {/sitemap.xml \t reescritura ^/Mapa del sitio \. xml $ /index.php?xxxxxxxxx permanent; } ' –

1

Ten en cuenta que el primer parámetro es una expresión regular, por lo que probablemente deberías escapar. y unir el final de la línea.

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

NginxHttpRewriteModule

3

Esto debería funcionar también, y puede realizar un poco mejor.

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

Creo que desea configurar un lugar. La parte clave es la directiva "=".

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

(Cuando no existía la cuenta =, todavía fue a la ubicación raíz nginx defecto)

Si lo establece como el de abajo, harían que todas las solicitudes /robots.txt* a ser leídos fuera de/var/foo. Entonces /robots.txt.bing intenta leer /var/foo/robots.txt.bing fuera del disco. El "^ ~" indica que es una coincidencia de expresión regular al comienzo de la solicitud.

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

Teniendo en cuenta que se encuentra en robots.txt/var/www/mysite/static/robots.txt, los siguientes trabajó para mí:

location = /robots.txt { 
    root /var/www/mysite/static/; 
} 
Cuestiones relacionadas