Общая проверка реферера mod_rewrite

Я ищу общий (независимый от хоста) набор правил mod_rewrite для проверки HTTP_REFERER на ресурсах. Я придумал следующее, которое казалось интуитивно понятным, но, к сожалению, не работает:

RewriteCond %{HTTP_REFERER} !^https?://%{HTTP_HOST}/.*
# RewriteRule .* - [F]  # <- or whatever

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

RewriteCond %{HTTP_HOST}##%{HTTP_REFERER} !^([^#]*)##https?://\1/.*

Но это ужасно, и если вы точно не знаете, что происходит, это ужасно сбивает с толку.

Есть ли лучший (более чистый) способ написания этих правил?

7 голосов | спросил tylerl 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2011 11:21:22 +0400 2011, 11:21:22

1 ответ


0
  

«Если вы не знаете точно, что происходит, это ужасно сбивает с толку»

Первые поздравления на обходном пути. Проверяя источник, mod_rewrite.c, похоже, не выполняет никакой формы интерполяции переменных, поэтому я не могу придумать альтернативы. Что касается вашего «запутанного» вопроса, не потому ли у нас есть комментарии? Я также привел в порядок ваше регулярное выражение (например, трейлинг. * Является избыточным) и использовал = как разделитель, чтобы подчеркнуть, что вы делаете сравнение.

Это может показаться липким, но ваша идея близка к оптимальной с точки зрения времени выполнения.

#
# Is **HTTP_REFERER** of the form http(s)://HTTP_HOST/....
# Note that mod_rewrite only does interpolation in the teststring so this is
# set up in the format AAAA=BBBB and the pattern uses a backreference (\1) to
# match the corresponding elements of AAAA and BBBB
#
RewriteCond %{HTTP_HOST}==%{HTTP_REFERER} !^(.*?)==https?://\1/
ответил TerryE 12 Jam1000000amThu, 12 Jan 2012 04:09:52 +040012 2012, 04:09:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132