PHP preg_match всегда возвращает false

У меня есть клиент. Допустим, их домен www.mydomain.com.

Мы создаем новую страницу по адресу www.mydomain.com/newsection.

На странице /newsection клиент хотел бы добавить ссылку «Вернуться на основной сайт» (www.mydomain.com) ТОЛЬКО в том случае, если пользователь ранее был на основном сайте.

Итак, я настроил фрагмент кода PHP следующим образом:

<?php
$referral = $_SERVER['HTTP_REFERER'];
if (preg_match('/http://www.mydomain.com/', $referral)) {
echo "from My Domain";
} else {
echo "not from My Domain";
}
?>

Однако это всегда возвращает false («Не из моего домена»), даже если пользователь заходит с mydomain.com.

Есть ли какие-либо очевидные синтаксические ошибки или другие логические проблемы, которые я не получаю?

Проблема в том, что моя новая страница (www.mydomain.com/newsection) все еще находится на этом основном домене?


person Ash    schedule 06.04.2012    source источник
comment
Включите error_reporting, тогда ошибка станет очевидной.   -  person mario    schedule 06.04.2012
comment
возможный дубликат Преобразовать eregi в preg_match - что такое Неизвестный модификатор 'Ф'?   -  person mario    schedule 06.04.2012


Ответы (3)


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

preg_match('~http://www\.mydomain\.com~', $referral)

Обратите внимание, что я также избегал ., которые являются специальными символами в регулярных выражениях. Они не нарушат регулярное выражение, но они соответствуют любому символу — вероятно, не тому, что вам нужно.

person Ry-♦    schedule 06.04.2012
comment
Спасибо большое. Я знал, что это, вероятно, что-то вроде этого, но я просто не мог этого понять. Очень, очень ценю это. - person Ash; 06.04.2012

Вы можете просто использовать strpos

if (strpos($referral, 'http://www.mydomain.com') !== false) {
person Jarosław Gomułka    schedule 06.04.2012

Включите error_reporting при разработке. На самом деле вы получаете что-то вроде следующего предупреждения, которое должно вам помочь (особенно в сочетании с ответом minitech):

Предупреждение: preg_match() [function.preg-match]: неизвестный модификатор '/' в

person MueR    schedule 06.04.2012
comment
Спасибо за совет! Я обязательно это сделаю. :) - person Ash; 06.04.2012