2010-11-08 10 views
6

Io uso la seguente classe JavaScript per tirare le variabili fuori da una stringa di query:Javascript non trova la mia stringa di query mod_rewrite!

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

Quindi questo funziona: http://example.com/signinup.html?opt=login

Ho bisogno http://www.example.com/login/ a lavorare nello stesso modo. Utilizzando mod_rewrite:

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

permette la pagina per caricare, il javascript per caricare, il css per caricare, ma le mie funzioni JavaScript non riesce a trovare la chiave opt (vale a dire, è undefined). Come posso ottenere opt sul mio javascript?

risposta

3

Javascript è lato client. Mod_rewrite è lato server.

Quindi Javascript non vedrà mai l'URL riscritto. Per quanto riguarda il tuo browser, l'URL che hai inserito è l'indirizzo finito.

L'unica vera soluzione è quella di cambiare il vostro Javascript in modo che appaia l'URL è ottenuto piuttosto che la vecchia versione (o, eventualmente, analizzare per entrambe le alternative, dal momento che il vecchio URL continuerà a funzionare e la gente può ancora avere i vecchi segnalibri).

L'altra soluzione possibile sarebbe quella di passare al codice lato server (PHP? Qualunque?) Dove è possibile vedere l'URL riscritto e inserire lì del codice javascript che è possibile analizzare sul lato client. Non è una soluzione ideale però. Sarebbe meglio andare solo con l'opzione 1 e cambiando Javascript per far fronte agli URL che sta per essere ottenuto.

+0

Grazie a tutti! @ La risposta di Spudley è la risposta più chiara, ma tutti mi hanno dato grandi risposte. Client/server che ha senso (ooops). Inoltre, altri potrebbero essere interessati alla risposta di @ Chris [R] flag. – Kyle

2

Il problema è che JavaScript viene eseguito sul lato client, quindi non vedrà mai la parte ?opt=login a cui l'URL viene convertito internamente sul server.

Oltre a modificare la propria espressione regolare in modo che corrisponda al nuovo formato di URL, la soluzione più semplice potrebbe essere quella di scrivere un'istruzione JavaScript sul lato server che presenti il ​​valore della variabile opt in JavaScript.

1

Se si tratta di un caso speciale, inserirlo in un caso speciale in qualche modo. Se riscrivi in ​​generale, modifica l'espressione regolare generale. Il modo in cui mod_rewrite funziona, il client non conosce mai l'URL riscritto. Dal client, sono solo /login/ e /login/. Solo il server sa che è davvero signinup.html?opt=login. Quindi non c'è modo che la tua espressione regolare o location.href possa saperlo.

1

A meno che non si usi il flag [R] nella RewriteRule, il browser (e quindi javascript) non saprà mai del nuovo URL. Se non vuoi reindirizzare le persone, dovrai aggiungere del codice alla tua pagina di accesso che OTTIENE parametri come javascript nella pagina.

1

Se si utilizza PHP, è possibile che PHP crei una variabile JavaScript per te. Per esempio:

$params = "?"; 

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

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

Ora, si JavaScript avrà accesso a una variabile urlParams che assomiglia a questo

?opt=login& 

Poi, nel codice Javascript, ovunque ci si aspetta di utilizzare i parametri URL, utilizzare il urlParams invece.

Problemi correlati