Я хотел бы настроить 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= всегда будет одинаковой и никогда не изменится.
Не могли бы вы попробовать следующее, написанное в соответствии с показанными вами образцами. Убедитесь, что вы очистили кеш браузера, прежде чем тестировать эти 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 спасибо. Что делает \sHTTP в конце?
Примером THE_REQUEST
является ``GET /index.php?id=123 HTTP/1.1`, он соответствует до HTTP
@anubhava спасибо. Чтобы подтвердить, будет ли он работать с https?
Хороший ответ @Anubhava, сэр. Имейте 👍.