Javascript ne peut pas trouver ma chaîne de requête mod_rewrite!

J'utilise la classe javascript suivante pour extraire les variables d'une chaîne de requête:

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

Cela fonctionne donc : http://example.com/signinup.html?opt=login

J'ai besoin de http://www.example.com/login/ pour fonctionner de la même façon. Utilisation de mod_rewrite:

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

Permet à la page de charger, javascript à charger, le css à charger, mais mes fonctions javascript ne peuvent pas trouver la clé opt (c.-à-d., Elle n'est undefined ). Comment puis-je accéder à mon javascript?

Javascript est client. Mod_rewrite est côté serveur.

Par conséquent, Javascript ne verra jamais l'URL réécrit. En ce qui concerne votre navigateur, l'URL que vous avez saisie est l'adresse terminée.

La seule solution réelle est de modifier votre Javascript afin qu'il regarde l'URL qu'il a obtenue plutôt que l'ancienne version (ou peut-être analyser pour les deux alternatives, car l'ancienne URL fonctionnera toujours et les personnes peuvent avoir d'anciens signets).

L'autre solution possible serait d'accéder à votre code côté serveur (PHP? Quoi que ce soit?) Où vous pouvez voir l'URL réécrit, et insérez ici un code javascript que vous pouvez analyser du côté client. Pas pourtant une solution idéale. Vous feriez mieux d'aller avec l'option 1 et de vous changer Javascript pour faire face aux URL qu'il obtiendra.

Votre problème est que JavaScript s'exécute du côté du client, de sorte qu'il ne verra jamais la partie ?opt=login pour laquelle l'URL se convertit en interne sur le serveur.

En plus de changer votre expression régulière pour correspondre au nouveau format d'URL, la solution la plus simple peut être d'écrire une instruction JavaScript sur le côté serveur qui introduit la valeur de la variable opt dans JavaScript.

S'il s'agit d'un cas particulier, mettez-le comme un cas spécial d'une manière ou d'une autre. Si vous réécrivez en général, modifiez votre expression générale régulière. La façon dont mod_rewrite fonctionne, le client ne connaît jamais l'URL réécrit. Du client, c'est /login/ et /login/ only. Seul le serveur sait que c'est vraiment signinup.html?opt=login . Donc, il n'y a aucun moyen d'être votre expression régulière ou votre emplacement. Je peux le savoir.

Sauf si vous utilisez le drapeau [R] dans votre RewriteRule, le navigateur (et donc javascript) ne connaîtra jamais la nouvelle URL. Si vous ne souhaitez pas rediriger les personnes, vous devrez ajouter un code à votre page de connexion qui GET les paramètres en tant que javascript dans la page.

Si vous utilisez PHP, vous pouvez créer le PHP pour créer une variable JavaScript. Par exemple:

 $params = "?"; foreach($_GET as $key => $value) { $params = $params . $key . "=" . $value . "&"; } echo 'var urlParams = "' . $params . '"'; 

Maintenant, votre JavaScript aura accès à une variable urlParams qui ressemble à ceci

 ?opt=login& 

Ensuite, dans votre code Javascript, où vous prévoyez utiliser les paramètres de l'URL, utilisez plutôt urlParams .