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]: неизвестный модификатор '/' в