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) все еще находится в этом основном домене?

3 ответа

Решение

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

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

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

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

if (strpos($referral, 'http://www.mydomain.com') !== false) {

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

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

Другие вопросы по тегам