Назад | Перейти на главную страницу

RewriteCond: проверка:% {HTTP_REFERER} включает или равно% {REQUEST_URI}

Есть ли способ проверить с помощью RewriteCond включает ли Referer запрошенный URI или ...

RewriteCond %{HTTP_REFERER} == 'host.com/' + %{REQUEST_URI} ...

?

Мне нужно поймать, щелкнул ли пользователь ссылку на странице, которая ведет на ту же страницу, и изменить RewriteRule на его основе.

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

Чтобы проверить, что пользователь «щелкнул» ссылку на странице, которая ведет на ту же страницу ... другими словами, является ли запрошенный хост + URL-путь подмножеством заголовка запроса HTTP Referer, вы можете сделать что-то вроде следующее с использованием mod_rewrite состояние:

RewriteCond %{HTTP_REFERER}@@%{HTTP_HOST}%{REQUEST_URI} ^https?://([a-z.-]+/[^?]*)(?:.*)@@\1$

В @@ представляет собой просто последовательность символов, которая не встречается в URL-адресе и действует как разделитель между двумя частями, которые мы пытаемся сопоставить.

В CondPattern (регулярное выражение) использует обратную ссылку (\1), чтобы проверить соответствие захваченной подгруппы в шаблоне Referer HTTP_HOST + REQUEST_URI.

Если ваш сайт поддерживает только HTTPS, вы можете удалить ? в ^https?://.

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

Просто нужно добавить обязательное примечание относительно заголовка запроса HTTP Referer ... это не на 100% надежно. Пользовательский агент может не отправлять заголовок Referer, когда он ожидается, и его легко подделать, если пользователь склонен сделать это.