.htaccess разрешить только из Chrome, Opera, Mozilla, Safari, перенаправлять с других

#regex #.htaccess #url-rewriting #user-agent

#регулярное выражение #.htaccess #url-переписывание #user-agent

Вопрос:

Я хочу настроить перенаправление, если пользователь не использует Chrome, Safari, Opera или Mozilla.

Для обратной задачи (если я не хочу Chrome и т. Д.) Есть решение:

 RewriteCond %{HTTP_USER_AGENT} Chrome
RewriteRule ^abcd.html$ chrome.html [NC,L]

RewriteCond %{HTTP_USER_AGENT} Safari
RewriteRule ^abcd.html$ safari.html [NC,L]
  

Добавление ! перед не работает

Комментарии:

1. ! Префикс означает no . Это должно сработать: RewriteCond %{HTTP_USER_AGENT} !Chrome затем добавьте RewriteCond %{HTTP_USER_AGENT} !Safari и т. Д. Могу я спросить, почему вы хотите это сделать?

2. Спасибо, я сейчас проверю. Чтобы заблокировать IE и другие странные браузеры, в которых моя система может выйти из строя

3. Вы знаете, что строка User-Agent может быть подделана, верно? Какова реальная причина для этого? Звучит как проблема X-Y.

4. То, что вы хотите, обычно делается с помощью небольшого количества JavaScript на стороне клиента — вы можете гораздо надежнее определять тип браузера в самом браузере.

5. Вы могли бы рассмотреть возможность отображения сообщения в браузерах, с которыми ваш сайт плохо работает. Вы можете настроить таргетинг на более старые версии IE с помощью условных комментариев, например: quirksmode.org/css/condcom.html или используйте JS, как говорит @mustaccio

Ответ №1:

Отрицание выполняется с помощью ! оператора. Использование [NC] флага также приведет к удалению строк, таких как chrome , chRome и т. Д:

 RewriteCond %{HTTP_USER_AGENT} !Chrome [NC]
RewriteRule ^abcd.html$ chrome.html [NC,L]