Назад | Перейти на главную страницу

URI запроса htaccess начинается с перенаправления http (s)

если запрос uri = / я хочу впустить запрос

GET / HTTP/1.1\r\n
Host: www.example.com\r\n
Accept: */*\r\n
Content-Type: text/html\r\n
Proxy-Connection: Keep-Alive\r\n
Content-length: 0\r\n
\r\n

но если URI запроса начинается с http: // [OR] https: //

GET http://www.baidu.com/ HTTP/1.1\r\n
Host: www.baidu.com\r\n
Accept: */*\r\n
Content-Type: text/html\r\n
Proxy-Connection: Keep-Alive\r\n
Content-length: 0\r\n
\r\n

Я хочу, чтобы он выполнял перенаправление 301 на запрошенный uri (в этом примере перенаправление на www.baidu.com)

Я пробовал это в своем .htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} ^http://$
RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_URI} ^https://$
RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]

но когда я попытался получить доступ к www.example.com, он перешел в цикл перенаправления

Попробуйте следующее:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ https?://[^\ ]+ HTTP/ [NC]
RewriteRule ^ %{REQUEST_URI} [R=301,L]

куда THE_REQUEST Переменная сервера - это начальный заголовок запроса. Например:

GET http://www.baidu.com/ HTTP/1.1

Однако я сомневаюсь, что это сработает - и возможно ли это вообще. По сути, вы перенаправляетесь на тот же URL (потенциальный цикл перенаправления) обратно к пользовательскому агенту, который уже создал этот искаженный запрос. Тот же самый пользовательский агент, скорее всего, создаст такой же искаженный запрос (?), Если даже произойдет перенаправление (потому что URL-путь фактически не изменился).

Я думаю, вам лучше отклонять такие искаженные запросы в конфигурации вашего сервера, поскольку я все равно не могу представить, что это законные запросы? Например:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ https?://[^\ ]+ HTTP/ [NC]
RewriteRule ^ - [F]

Хотя могут быть способы получше, чем использование mod_rewrite.

Мог бы решить это с помощью

RewriteEngine On
RewriteCond %{THE_REQUEST} http:// [NC]
RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]
RewriteCond %{THE_REQUEST} https:// [NC]
RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]