Javascript не может найти мою строку запроса mod_rewrite! - PullRequest
7 голосов
/ 08 ноября 2010

Я использую следующий класс javascript для извлечения переменных из строки запроса:

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

Итак это работает : http://example.com/signinup.html?opt=login

Мне нужно http://www.example.com/login/, чтобы работать так же. Использование mod_rewrite:

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

позволяет загружать страницу, загружать javascript, загружать css, но мои функции javascript не могут найти клавишу opt (т.е. это undefined). Как мне получить opt к моему javascript?

Ответы [ 5 ]

3 голосов
/ 08 ноября 2010

Javascript на стороне клиента.Mod_rewrite на стороне сервера.

Поэтому Javascript никогда не увидит переписанный URL.Что касается вашего браузера, то введенный вами URL-адрес является законченным.

Единственное реальное решение - изменить ваш Javascript так, чтобы он смотрел на полученный URL-адрес, а не на старую версию (или, возможно, на анализдля обеих альтернатив, так как старый URL все еще будет работать, и у людей все еще могут быть старые закладки).

Другое возможное решение - перейти к вашему серверному коду (PHP? независимо от того?), где вы можете увидетьпереписанный URL, и вставьте туда некоторый код JavaScript, который вы можете проанализировать на стороне клиента.Не идеальное решение, хотя.Вы бы лучше просто выбрали вариант 1 и изменили свой Javascript так, чтобы он справлялся с URL-адресами, которые он фактически получит.

2 голосов
/ 25 ноября 2011

Если вы используете PHP, вы можете заставить PHP создать переменную JavaScript для вас. Например:

$params = "?";

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

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

Теперь у вашего JavaScript будет доступ к переменной urlParams, которая выглядит следующим образом

?opt=login&

Затем в своем коде Javascript, где бы вы ни ожидали использовать параметры URL, используйте вместо него urlParams.

2 голосов
/ 08 ноября 2010

Ваша проблема в том, что JavaScript работает на стороне клиента, поэтому он никогда не увидит часть ?opt=login, в которую URL-адрес конвертируется внутренне на сервере.

Помимо изменения вашего регулярного выражения в соответствии с новым форматом URL, самым простым способом может быть написание на стороне сервера оператора JavaScript, который вводит значение переменной opt в JavaScript.

1 голос
/ 08 ноября 2010

Если вы не используете флаг [R] в своем RewriteRule, браузер (и, следовательно, javascript) никогда не узнает о новом URL.Если вы не хотите перенаправлять людей, вам нужно добавить на страницу входа некоторый код, который ПОЛУЧИТ параметры на странице в виде javascript.

1 голос
/ 08 ноября 2010

Если это особый случай, то определенным образом обозначьте его как особый случай.Если вы переписываете вообще, измените ваше общее регулярное выражение.Как работает mod_rewrite, клиент никогда не знает переписанный URL.От клиента это только /login/ и /login/.Только сервер когда-либо знает, что это действительно signinup.html?opt=login.Так что ваше регулярное выражение или location.href никак не могут об этом знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...