Подстановочный знак доступен в asp classic?

У меня есть сайт с классическим asp, использующим vbscript. Как я могу проверить, приходит ли пользователь из определенного каталога на моем сайте? у меня есть этот код

<%Response.Write(Request.ServerVariables("http_referer"))%>

который пишет: http://example.com/mobile/REFER.asp. Я хотел бы написать оператор if/else, который сначала проверяет, находится ли ссылающийся uri в каталоге http://example.com/mobile/.

Итак, мой код должен быть примерно таким, как показано ниже. Но я не уверен в синтаксисе. Есть ли такая вещь, как подстановочный знак asp?

<% Request.ServerVariables("http_referer") == "http://example.com/mobile/*"

В конце концов я хотел бы использовать это, чтобы написать оператор if/else

<% if Request.ServerVariables("http_referer") != "http://example.com/mobile/*" then 
null; elseif (screen.width <= 699) {
    document.location = "/mobile/mobile_home.asp";
  } %>

===

В итоге отредактировал образец javascript @ mikeyq6, который работает:

<script type="text/javascript">
if(document.referrer.indexOf('/mobile') > -1 &&
    screen.width <= 699) {
    document.location = "/mobile/mobile_home.asp";
}
</script>

person testing123    schedule 23.03.2016    source источник
comment
Имейте в виду, что любой подход, использующий жестко закодированный URL-адрес, не является лучшей идеей, особенно с точки зрения обслуживания. Если вам нужно сделать это, рассмотрите возможность сохранения в URL-адресе, который вы хотите проверить, внутри переменная уровня объекта приложения, таким образом, вы можете определить ее один раз внутри global.asa и вызывать при необходимости.   -  person user692942    schedule 23.03.2016


Ответы (2)


Вы знаете длину фиксированного URL-адреса, который вы ищете, поэтому просто посмотрите, соответствуют ли ему первые n символов реферера:

const BASE_DIR = "http://example.com/mobile/"

dim referer: referer = lcase(Request.ServerVariables("http_referer"))

if left(referer, len(BASE_DIR)) = BASE_DIR then
    ...
else
    ...
end if
person Alex K.    schedule 23.03.2016

По сути, вы имеете дело со строкой, поэтому вы не можете использовать подстановочные знаки таким образом (если только вы не использовали регулярные выражения, что в данном случае похоже на удар кувалдой по гвоздю)

Было бы намного проще использовать функцию InStr, чтобы проверить, содержит ли значение искомую строку. Например:

<% if InStr(Request.ServerVariables("http_referer"), "http://example.com/mobile/") = 0 then
    null
elseif (screen.width <= 699) {
    document.location = "/mobile/mobile_home.asp";
} %>

Подробнее о InStr здесь: http://www.w3schools.com/asp/func_instr.asp

Вы также можете сделать что-то подобное в javascript:

if(window.location.href.indexOf("http://example.com/mobile/") > -1 &&
    screen.width <= 699) {

    document.location = "/mobile/mobile_home.asp";
}

Обратите внимание, что я также упростил if...else. Вам не нужны оба случая.

person mikeyq6    schedule 23.03.2016
comment
Упс. Так что, видимо, я смешал asp и javascript. Есть ли эквивалент javascript для InStr(Request.ServerVariables(http_referer)? - person testing123; 23.03.2016
comment
@user5753132 user5753132 Я добавил пример в javascript внизу ответа - person mikeyq6; 23.03.2016