Apache httpd.conf for redirecting ip to hostname

冷暖自知 提交于 2019-12-18 11:25:24

问题


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.


回答1:


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




回答2:


Try this:

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

Also you can see rewrite logs, see here




回答3:


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>



回答4:


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.




回答5:


If you are using https domain than add following:

# BEGIN HTTPS Redirection Plugin
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^XX\.XX\.XX\.XX$
RewriteRule ^(.*)$ https://your-domain-name.com/$1 [L,R=301]
</IfModule>
# END HTTPS Redirection Plugin

We are using https redirection plugin on site. Above block of code is generated by the plugin and we added only two lines in the code block. Below two lines are responsible to set IP to Domain redirection:

RewriteCond %{HTTP_HOST} ^XX\.XX\.XX\.XX$
RewriteRule ^(.*)$ https://your-domain-name.com/$1 [L,R=301]

Here ^XX.XX.XX.XX$ is your IP address, replace it like this: ^12.34.56.78$ with your server IP.

Thanks



来源:https://stackoverflow.com/questions/11649944/apache-httpd-conf-for-redirecting-ip-to-hostname

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!