2014-09-20 1 views
0

Вы знаете, как исправить следующую проблему? Для этого пройдите до http://11klassniki.ru/school_post.php?id_school=2639 и нажмите на ссылку Официальный сайт: tsarevo-zaimishe-sosh.edusite.ru, и вы будете переведены на http://11klassniki.ru/tsarevo-zaimishe-sosh.edusite.ru. Я не знаю, почему, но ссылка начинается с основного сайта.Ссылка на другой сайт начинается с основного сайта

Если бы я изменил ссылку в базе данных и добавлю «http: //», я не вызвал никаких проблем.

Конечно, я могу добавить "HTTP: //" на следующий код:

if (!empty($myrow_vuz ['site'])) { 
printf ("<p class='town'>Official site: <span class='town_name'> 
<noindex><a href='%s' target = '_blank' rel='nofollow'>%s</a></noindex></span></p>" 
, $myrow_vuz["site"], $myrow_vuz["site"]); 
} 

Но у меня есть много ссылок в базе данных, которая начинается с HTTP: // уже.

ответ

0

Если href не содержит протокол, например http://, он считается относительным путем. Идея состоит в том, что у вас может быть ссылка на /logout без ссылки на имя хоста. Когда вы ссылаетесь на tsarevo-zaimishe-sosh.edusite.ru без протокола, он по-прежнему интерпретируется как относительная ссылка.

Таким образом, учитывая, что вы должны включать http:// в ваших ссылках, вы можете пройти через вашу базу данных, чтобы привести в порядок те, которые имеют, или написать свой код дисплея так, что он проверяет, является ли http:// уже есть, и добавляет его если это не так.

0

Я считаю, что вы ответили на свой вопрос. Если вы можете добавить http: //, и он решает проблему, то почему бы не сделать это?

1

Вы правы в своем понимании, что вы должны добавить http:// в начало вашей ссылки, иначе оно будет относиться как относительное, а не к абсолютному.

Поскольку вы используете PHP, вы можете легко проверить, действительно ли ваша ссылка начинается с http://, а если нет, добавьте ее в ссылку!

Отметьте How to check if a string starts with a specified string?, как проверить, начинается ли ваша строка с http:// и добавьте ее оператором . (точка). Удачи!

1

Вы можете запустить preg_match для проверки экземпляров http: // или https: // и добавить их, когда их там нет. Однако очистка вашего решения всегда будет содержать http: // в начале всех сохраненных ссылок.

$site = "http://mywebsite.com"; 
// For replacement of your code, you may remove the line above and uncomment the one below. 
//$site = $myrow_vuz ['site']; 

if (! empty ($site)) { 
    $site = (preg_match ("/(^http:\/\/)|(^https:\/\/)/", $site)) ? $site : "http://" . $site; 
    printf ("<p class='town'>Official site: <span class='town_name'><noindex><a href='%s' target = '_blank' rel='nofollow'>%s</a></noindex></span></p>", $site, $site); 
} 
+1

Большое спасибо. Оно работает! – user3871018

+0

Возможно, вы должны пометить этот вопрос так, как это было тогда ответ, так что время от других не будет исправлять эту проблему. – Baldvin

Смежные вопросы