Можно ли использовать mod_rewrite для принудительного перенаправления всех пользователей, заходящих на сайт (либо по ссылке с другого сайта, либо путем ввода URL-адреса в адресной строке) на домашнюю страницу? После этого с домашней страницы (или любой другой страницы сайта) пользователи должны иметь доступ к другим страницам сайта. Но все пользователи будут вынуждены заходить на сайт через домашнюю страницу. Можно ли это сделать с помощью mod_rewrite (или без использования языка сценариев)?
Конечно, с некоторыми возможными недостатками. Простая версия выглядит так:
RewriteCond %{HTTP_REFERER} !example.com
RewriteRule ^/. / [R]
Это проверяет, что реферер не содержит вашего доменного имени, а затем для любого URI, который имеет что-то после первой косой черты (т.е. любая страница, кроме домашней), отправляет пользователю перенаправление на домашнюю страницу.
Это полностью нарушит работу вашего сайта для любого пользователя, который не отправляет рефереров или не изменяет их. Например, некоторые приложения для обеспечения конфиденциальности меняют рефереры на http://xxxxxxxxxxxxxxxxxxxxxxx
где количество x
s соответствует длине исходного истинного реферера.
Если вы отправите электронное письмо с изображением, на которое ссылается ваш сайт, указанное выше правило нарушит и это.
Это также плохо для посетителей, которые переходят по ссылке на определенную страницу с другого сайта (например, Google). Затем они перенаправляются на домашнюю страницу и не знают, как вернуться на страницу, на которой они были. Эти посетители, скорее всего, нажмут кнопку «Назад» и выберут другой результат поиска. Вы можете сделать это немного лучше, изменив правило перезаписи.
RewriteCond %{HTTP_REFERER} !example.com
RewriteRule ^(/.+) /?prev=$1 [R]
Затем вы можете использовать свое приложение на домашней странице, чтобы предоставить обратную ссылку на страницу, на которой они были. Вы также можете установить файлы cookie с помощью mod_rewrite, чтобы ?prev=$1
вместо этого может существовать внутри файла cookie.
Вероятно, есть и другие недостатки юзабилити, которые я не предвидел. Вы должны внимательно следить за своими посетителями, если реализуете это.
Я просто подумал об еще одном недостатке: боты редко присылают рефереров. Если вы реализуете это так, как написано, и не ведете полный список желаемых ботов (пользовательские агенты и / или диапазоны IP-адресов) и отключите его для них, то ваш сайт будет недоступен для сканирования роботами поисковых систем.
Вы можете использовать PHP:
Первое, что приходит мне в голову, - это использование "$ _SERVER ['HTTP_REFERER']", однако это может быть отключено пользователем на стороне клиента, если оно отображается или нет, насколько мне известно, пожалуйста, поправьте меня, если Я не прав. Итак, вы могли бы сделать что-то вроде псевдокода:
if $myDomain is part of $_SERVER['HTTP_REFERER'] then
redirect
else
do nothing
Поскольку люди могут это изменить, вы можете ввести переменную сеанса в PHP. Псевдокод:
if empty( $_SESSION['newvisitor'] ) && !isset($_SESSION['newvisitor'])
{
$_SESSION['newvisitor'] = true;
}
else
{
$_SESSION['newvisitor'] = false
}
if ( $_SESSION['newvisitor'] )
{
#redirect to home
}
Итак, в основном сценарий сначала проверяет, установлена ли переменная, если она не установлена, то это должен быть новый посетитель, поэтому он должен перенаправить на домашнюю страницу. Если это действительно установлено, перенаправление не должно выполняться.
РЕДАКТИРОВАТЬ: Признано, мое первое решение было неправильным, поскольку оно не могло совпадать, если он действительно пришел с подстраницы.