2012-07-25 6 views
11

Mam zewnętrzny adres IP i nazwę hosta skonfigurowaną dla mojego komputera.Apache httpd.conf do przekierowania adresu IP na nazwę hosta

Wewnątrz aplikacji używam tylko nazw domen, aby uzyskać dostęp do interfejsów API. Tak więc, gdy próbuję uzyskać dostęp do moich API za pośrednictwem adresu IP, pokazuje 302 przeniesiony tymczasowo błąd. Tak więc, na żądanie (dla strony głównej), które uderza serwer z adresem IP, powinno przekierować do nazwy hosta.

Oznacza to, że gdy użytkownik wciśnie https://XX.XX.XX.XX/main powinien zostać przekierowany do https://ayz-abc.mysite.com/main

Do tego Próbowałem za pomocą przekierowania w httpd.conf 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> 

Próbowałem również z następującym

<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 pomóż mi.

+0

302 nie jest błędem. Jeśli serwer odpowiada 302, działa przekierowanie. Jaka jest odpowiedź HTTP z serwera? –

+0

Interfejs użytkownika nadal nie jest przekierowywany na nazwę hosta, ale interfejsy API są wewnętrznie skonfigurowane tak, aby wskazywały nazwy hostów. więc kiedy próbuję uzyskać dostęp do interfejsów API z interfejsu użytkownika, żądanie do API (z nazwą hosta) pokazuje 302 – Poppy

Odpowiedz

7

Ok. Brakuje warunku przepisać

<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> 

Jeśli nie obejmują tego warunku nastąpi przekierowanie nawet z nazwą

+1

Usuwa resztę adresu URL oprócz parametru HTTP_HOST. Lepiej używać RewriteRule^(. *) $ Https: //ayz-abc.mysite.com$1 [R = 301, L] – pogeybait

1

Spróbuj tego:

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

Ponadto można zobaczyć przepisać dzienniki, see here

+0

Próbowałem go używać, ale wciąż otrzymuję ten sam błąd. Również Ankit, w przeglądarce nadal wyświetla tylko adres IP. Czy nie będzie to nazwa hosta? – Poppy

+0

Przekierowuj na stałe https: //xx.xx.xx.xx/main https://ayz-abc.mysite.com/main/ czy wszystko będzie dobrze? – Poppy

1

Działa to dla mnie. Dodaj konfiguracje w httpd.conf apache

CASE-1: gdy użytkownik wciśnie http://XX.XX.XX.XX/main lub http://ayz-abc.mysite.com/main powinien zostać przekierowany do https://ayz-abc.mysite.com/main

Konfiguracja:

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

Przypadek 2: Gdy użytkownik kliknie to https://XX.XX.XX.XX/main powinien zostać przekierowany do https://ayz-abc.mysite.com/main

Konfiguracja:

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> 
0

Jeśli NIE korzystasz z interfejsu API, ale chcesz, aby przeglądarki i roboty indeksujące korzystały z adresu URL zamiast adresu IP, możesz użyć narzędzia RedirectStandent.

<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> 

Ma tę zaletę, że reaguje z 301 statusu HTTP, który sygnalizuje „proszę użyć adresu URL przekierowanie do przyszłości”, która pomaga w wyszukiwarkach. Powinieneś użyć tego samego rozwiązania, jeśli przeniesiesz swoją witrynę do nowej domeny.