2012-03-11 14 views
5

Duplicar posible:
Apache rewrite based on subdomain¿Cómo volver a escribir un subdominio a una variable en una URL?

¿Es posible volver a escribir una URL como esta?

www.foo.website.com/some-page 

a

www.website.com/some-page?var=foo 

estoy preguntando por una reescritura (creo que eso es lo que se llama) y no una redirección. es decir, quiero que la primera URL permanezca en la barra de direcciones, pero que el servidor "obtenga" la segunda URL.

nunca he entendido cómo hacer reescrituras de URL y hasta ahora mis patéticos intentos de conseguir este trabajo han fracasado estrepitosamente :-)

debo añadir que este archivo .htaccess también está siendo utilizado por WordPress y tiene el siguiente código:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /~kbj/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /~kbj/index.php [L] 
</IfModule> 

¡Cualquier ayuda o consejo sería muy apreciado!

+2

http://stackoverflow.com/questions/49500/apache-rewrite-based-on-subdomain –

Respuesta

2

Lo que voy a explicar es para los sitios web en varios idiomas, pero se puede aplicar muy fácilmente esto a lo que preguntas: cambiar el nombre de "LANGUAGE" a "var" (sonrisa).

Esto es lo que puede hacer, para poder manejar en el futuro muchos sub idiomas. Compruebe su host: si contiene un "idioma conocido", agréguelo a una variable global (= variable de entorno desde el punto de vista de Apache) y al final, si la variable "idioma" no está configurada, configure como predeterminado idioma. Y finalmente, agrégalo como parámetro.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
    RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

    RewriteCond %{HTTP_HOST} ^(www\.)?(us|fr|pt)\.mydomain\.com$ 
    # Create an environment variable to remember the language: 
    RewriteRule (.*) - [QSA,E=LANGUAGE:%2] 
    # Now check if the LANGUAGE is empty (= doesn't exist) 
    RewriteCond %{ENV:LANGUAGE} ^$ 
    # If so, create the default language (=es): 
    RewriteRule (.*) - [QSA,E=LANGUAGE:es] 
    # Add the language to the URI (without modifying it): 
    RewriteCond (.*) $1?language={ENV:LANGUAGE} [QSA] 

</IfModule> 

(nota: por favor, utilice la sangría adecuada).

0

Prueba esto:

RewriteCond %{HTTP_HOST} ^([^.]+).domain.com$ 
RewriteRule (.*) http://www.domain.com/$1?subdomain=%1 

Lleva todo lo que encuentra como un subdominio y lo asigna al expediente de dominio principal con el nombre de dominio secundario que se adjunta como un parámetro GET.

2
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

Utilice la bandera P para proxy la solicitud.

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p

+0

Gracias por su respuesta. Intenté usar el código que sugirió, pero desafortunadamente no funcionó. Traté de eliminar todo del archivo .htaccess a excepción de http://pastebin.com/4i7LKn48 y luego navegar a www.test.website.com, y me aparece el error "Servidor no encontrado". ¿Alguna idea de por qué no está funcionando? De nuevo, gracias por tu ayuda. – Nate

Cuestiones relacionadas