Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Apache httpd.conf for redirecting ip to hostname

I have external IP and hostname configured for my machine.

Inside the application, I am using only the domain names to access the APIs. So when i try to access my APIs through IP address, it shows 302 Moved temporarily error. So, for request(for Homepage) that hits the server with IP address, It should redirect to hostname.

That is, when user hits https://XX.XX.XX.XX/main it should be redirected to https://ayz-abc.mysite.com/main

For this I tried using the redirect in httpd.conf of apache.

<VirtualHost XX.XX.XX.XX>

DocumentRoot "/var/www/html"
#ServerName ayz-abc.mysite.com/

 # Other directives here
 RewriteEngine On
 RewriteRule /.* https://ayz-abc.mysite.com/ [R]

</VirtualHost>

I have also tried with the following

<VirtualHost *.portnum>
DocumentRoot "/var/www/html"
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule  https://XX.XX.XX.XX/main https://ayz-abc.mysite.com/main [R=301,L]
</VirtualHost>

Plsssss help me.

like image 970
Poppy Avatar asked Jul 25 '12 12:07

Poppy


4 Answers

Ok. You are missing a rewrite condition

<VirtualHost XX.XX.XX.XX>

DocumentRoot "/var/www/html"
#ServerName ayz-abc.mysite.com/

 # Other directives here
 RewriteEngine On
 RewriteCond %{HTTP_HOST} !^ayz-abc.mysite.com$
 RewriteRule /.* https://ayz-abc.mysite.com/ [R]

</VirtualHost>

If you don't include this condition it will redirect even with the hostname

like image 133
William Greenly Avatar answered Nov 10 '22 03:11

William Greenly


Try this:

RewriteRule $ https://ayz-abc.mysite.com/ [L,R]

Also you can see rewrite logs, see here

like image 45
Ankit Avatar answered Nov 10 '22 03:11

Ankit


This works for me. Add the configurations in httpd.conf of apache

CASE-1: when user hits http://XX.XX.XX.XX/main or http://ayz-abc.mysite.com/main it should be redirected to https://ayz-abc.mysite.com/main

Configuration:

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
<VirtualHost *:80>
ServerName XX.XX.XX.XX
Redirect /main https://ayz-abc.mysite.com/main
</VirtualHost>

CASE 2 : When user hits https://XX.XX.XX.XX/main it should be redirected to https://ayz-abc.mysite.com/main

Configuration:

NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot "/var/www/html"
#Server Name 
ServerName XX.XX.XX.XX
SSLEngine on
SSLOptions +StrictRequire
# Redirect to the specified URL 
Redirect /main https://ayz-abc.mysite.com/main
<Directory />
SSLRequireSSL
</Directory>
....
....
</VirtualHost>
like image 1
Poppy Avatar answered Nov 10 '22 01:11

Poppy


If you are NOT using API but just want browsers and crawlers to go to URL instead of an IP-Address, then you can use RedirectPermanent.

<VirtualHost XX.XX.XX.XX>

    RedirectPermanent / http://ayz-abc.mysite.com/

</VirtualHost>

<VirtualHost XX.XX.XX.XX>

    DocumentRoot "/var/www/html"
    ServerName ayz-abc.mysite.com/

</VirtualHost>

It has the advantage of responding with 301 HTTP status, which signals "please use the url you are redirected to in the future", which helps with search engines. You should use the same solution if you move your site to a new domain.

like image 1
Bojan Hrnkas Avatar answered Nov 10 '22 01:11

Bojan Hrnkas