Перенаправление Apache в зависимости от типа браузера и шаблона URL

Я хотел бы настроить apache так, чтобы, если приходит запрос на URL-адрес, который соответствует шаблону и относится к определенному браузеру, он перенаправлялся на определенную страницу.

Я знаю, что могу перенаправить на страницу, читающую пользовательский агент, чтобы получить браузер с этим:

RewriteCond "%{HTTP_USER_AGENT}"  ".*Trident.*"

Если это, например, IE, и URL-адрес соответствует определенному шаблону, я бы хотел, чтобы он был перенаправлен на пользовательскую html-страницу.

Это шаблон URL:

https://example.com/alt/var/b?a=[variable]:[numeric variable]:[someother variables I don't car eabout]

Examples:
https://example.com/alt/var/b?a=cat:200:someotherstuff
https://example.com/alt/var/b?a=cat:350:someotherstuff
https://example.com/alt/var/b?a=dog1:200:someotherstuff
https://example.com/alt/var/b?a=dog1:99:someotherstuff

Меня интересуют только первые две переменные. Первая переменная всегда будет разной. Вторая переменная, которая может быть только числом, всегда будет другой. Если вторая переменная равна 99, а браузер - IE, я бы хотел, чтобы он перенаправлялся на мою пользовательскую html-страницу. Моя проблема в том, что я не смог понять, как написать правило для этого? Часть https://example.com/alt/var/b?a= всегда будет одинаковой и никогда не изменится.

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
0
407
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не могли бы вы попробовать следующее, написанное в соответствии с показанными вами образцами. Убедитесь, что вы очистили кеш браузера, прежде чем тестировать эти URL-адреса. Если вы хотите сопоставить любую цифру после a=, это сработает.

RewriteEngine ON
RewriteCond %{HTTP_USER_AGENT} Trident|MSIE [NC]
RewriteCond %{THE_REQUEST} \s/alt/var/b\?a=[\w-]+:[0-9]+:[^\s]*\s [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/your_custom_page [L]
Ответ принят как подходящий

Если вторая переменная равна 99, а браузер IE, я бы хотел, чтобы он перенаправлял на мою пользовательскую html-страницу.

Вы можете использовать это правило перенаправления:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} Trident|MSIE [NC]
RewriteCond %{THE_REQUEST} /alt/var/b\?a=[^:]+:99:[^\s&]*\sHTTP [NC]
RewriteRule ^ /custom.html? [L,NE,R=301]
  • %{HTTP_USER_AGENT} Trident|MSIE: будут соответствовать пользовательским агентам IE
  • :99:: будет перенаправлено только в том случае, если 2-я переменная равна 99 в соответствии с требованиями.
  • ? в конце цели удалит ранее существовавшую строку запроса.

Однако, пожалуйста, прочтите также об обнаружении пользовательского агента

Хороший ответ @Anubhava, сэр. Имейте 👍.

Amit Verma 10.12.2020 07:43

@anubhava спасибо. Что делает \sHTTP в конце?

user2924127 10.12.2020 20:20

Примером THE_REQUEST является ``GET /index.php?id=123 HTTP/1.1`, он соответствует до HTTP

anubhava 10.12.2020 20:22

@anubhava спасибо. Чтобы подтвердить, будет ли он работать с https?

user2924127 10.12.2020 21:09

Другие вопросы по теме