2010-11-08 9 views
6

utilizo la siguiente clase javascript para tirar de las variables de una cadena de consulta:¡Javascript no puede encontrar mi cadena de consulta mod_rewrite!

getUrlVars : function() { 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { 
     vars[key] = value; 
    }); 
    return vars; 
} 

Así esto funciona: http://example.com/signinup.html?opt=login

necesito http://www.example.com/login/ a trabajar de la misma manera. El uso de mod_rewrite:

RewriteRule ^login/? signinup.html?opt=login [QSA]

permite que la página se cargue, el javascript para cargar, el css para cargar, pero mis funciones javascript no puede encontrar la clave opt (es decir, es undefined). ¿Cómo obtengo opt en mi javascript?

Respuesta

3

Javascript está del lado del cliente. Mod_rewrite es del lado del servidor.

Por lo tanto, JavaScript nunca verá la URL reescrita. En lo que respecta a su navegador, la URL que ingresó es la dirección finalizada.

La única solución real es cambiar su Javascript para que vea la URL en lugar de la versión anterior (o posiblemente las dos alternativas, ya que la antigua URL seguirá funcionando y las personas aún pueden tener marcadores antiguos).

La otra posible solución sería ir a su código del lado del servidor (¿PHP? ¿Qué?) Donde puede ver la URL reescrita, e insertar allí algún código javascript que pueda analizar en el lado del cliente. Aunque no es una solución ideal. Sería mejor simplemente ir con la opción 1 y cambiar tu Javascript para hacer frente a las URL que realmente recibirá.

+0

¡Gracias a todos! La respuesta de @Suddley es la respuesta más clara, pero todos me dieron excelentes respuestas. Cliente/servidor que tiene sentido (ooops). Además, otros pueden estar interesados ​​en @ Chris's [R] flag answer. – Kyle

2

Su problema es que JavaScript se ejecuta en el lado del cliente, por lo que nunca verá la parte ?opt=login a la que la URL se convierte internamente en el servidor.

Además de cambiar su expresión regular para que coincida con el nuevo formato de URL, la solución más fácil podría ser escribir una declaración de JavaScript en el servidor que introduzca el valor de la variable opt en JavaScript.

1

Si se trata de un caso especial, póngalo como caso especial de alguna manera. Si reescribe generalmente, cambie su expresión regular general. La forma en que mod_rewrite funciona, el cliente nunca sabe la URL reescrita. Desde el cliente, es /login/ y /login/ solamente. Solo el servidor sabe que realmente es signinup.html?opt=login. Por lo tanto, no hay manera de que su expresión o ubicación regular.href pueda saberlo.

1

A menos que use el indicador [R] en su RewriteRule, el navegador (y por lo tanto javascript) nunca sabrá sobre la nueva URL. Si no desea redirigir a las personas, tendrá que agregar un código a su página de inicio de sesión que OBTENGA parámetros como javascript en la página.

1

Si está utilizando PHP, puede hacer que PHP cree una variable de JavaScript para usted. Por ejemplo:

$params = "?"; 

foreach($_GET as $key => $value) { 
    $params = $params . $key . "=" . $value . "&"; 
} 

echo 'var urlParams = "' . $params . '"'; 

Ahora, JavaScript tendrá acceso a una variable urlParams que tiene este aspecto

?opt=login& 

Luego, en el código Javascript, donde espera que use los parámetros de URL, utilice el urlParams en su lugar.

Cuestiones relacionadas