Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I redirect all URLs containing an IP address to my www domain?

I have several servers with different IP addresses. I want to make it impossible to reach them via IP directly. Instead, I want them to redirect to my domain, www.site.com.

The following condition matches an exact IP:

RewriteCond %{REMOTE_HOST} !^123\.456\.789\.012$

How can I match any IP using Apache rewrite rules?

like image 300
ty. Avatar asked Dec 21 '22 22:12

ty.


2 Answers

Note, you were using the wrong tag. It's not REMOTE_HOST as this is the user's ip. You need HTTP_HOST to get the server's IP.

For example::

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^\d+\.
RewriteRule (.*) http://www.example.com/$1 [R=301]

Edit, you can use a more specific regex if you want to. The main problem was your original tag.

Edit2:

If you have the list of specific IPs you want to redirect then you can use

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^111\.111\.111\.111 [OR]
RewriteCond %{HTTP_HOST} ^222\.222\.222\.222
RewriteRule (.*) http://www.example.me/$1 [R=301]
like image 110
AlanFoster Avatar answered May 09 '23 14:05

AlanFoster


If the regex is all you need, you can try replacing the !^123\.456\.789\.012$ by:

!^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$

This will match the characters between 0-9 (numerical characters) from 0 up to 3 times between each literal dot, 4 times between the 3 dots.

like image 39
Fabrício Matté Avatar answered May 09 '23 14:05

Fabrício Matté