2010-03-23 19 views
8

necesito una regla de reescritura para reescribir nginx de:nginx subdominio reescritura

http://some-keyword.example.com a www.example.com/keyword.php?keyword=$some-keyword

mientras que el dominio sin www delante todavía reescribe a www.example.comwww y no se toma como una palabra clave.

¿Podría ayudarme a resolver este problema, cómo escribir estas dos reglas?

+0

Usted dice reescribir (como en el lado del servidor, reescribir el proxy) pero parece que quiere decir redirigir? En un redireccionamiento, la URL visible para el usuario cambia. En una reescritura proxy, todo sucede en el lado del servidor, invisible para el usuario. – conny

+0

Me refiero a reescribir, lo que los usuarios deberían ver es http://keyword.example.com Conny – ivan73

Respuesta

7

Si significaba redirigir, entonces:

server { 
    server_name ~^(.*)\.example\.com$ ; 

    rewrite^http://www.example.com/keyword.php?keyword=$1 redirect; 
} 

En el caso de reescritura luego simplemente hacer

server { 
    server_name example.com ~^(.*)\.example\.com$ ; 

    rewrite^/keyword.php?keyword=$1 break; 

# location /keyword.php { 
# .... 
# } 
} 
+1

Incluso si la pregunta era sobre reescrituras, su ejemplo no excluye "www" como debería. Necesita agregar una construcción de búsqueda anticipada negativa para eso: '^ ((?! www \.). *) \. Example \ .com $' – conny

+0

La configuración debería estar bien sin una búsqueda anticipada negativa, porque Nginx tiene un orden de búsqueda de servidor tal que los nombres completos (www.example.com) van antes de los regexes. –

+0

Tengo un problema similar, pero esta solución no parece estar reescribiendo el host. En el PO, solicitó que el servidor manejara www.example.com/keyword.php?keyword=$1 cuando las reglas estuvieran completas, pero esto parece reescribir solo la ruta y la consulta. ¿Hay alguna manera de reescribir el host internamente? Solo he visto ejemplos usando redirecciones y todos mis experimentos han fallado. Gracias. –

2
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&p=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-1-price-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=1&price=$3 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-1\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=1 last; 
rewrite ^/list-c-([0-9]+)-k-(.+)-o-(.+)-p-(.+)\.html$ /index.php?module=Default&action=List&c=$1&k=$2&o=$3&p=$4 last; 
0

Si es posible que sólo crearía 1 servidor (virtual host) que es el domain.com/www.domain.com normal y luego usa el conf para reescribir el resto

server { 
    server_name domain.com www.domain.com; 
    # normal handling for files 
} 

server { 
    server_name ~(?<subdomain>[^\.]*).domain.com; 
    location/{ 
     try_files keyword.php?keyword=$subdomain =404; 
    } 
} 

por favor dime si me perdí algo.

Cuestiones relacionadas