【问题标题】:Apache httpd.conf for redirecting ip to hostname用于将 ip 重定向到主机名的 Apache httpd.conf
【发布时间】:2012-07-23 21:32:02
【问题描述】:

我为我的机器配置了外部 IP 和主机名。

在应用程序内部,我只使用域名来访问 API。因此,当我尝试通过 IP 地址访问我的 API 时,它会显示 302 Moved 临时错误。 因此,对于使用 IP 地址访问服务器的请求(对于主页),它应该重定向到主机名。

也就是说,当用户点击https://XX.XX.XX.XX/main时,它应该被重定向到https://ayz-abc.mysite.com/main

为此,我尝试在 apache 的 httpd.conf 中使用重定向。

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

我也尝试过以下方法

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

请帮助我。

【问题讨论】:

  • 302 不是错误。如果服务器以 302 响应,则重定向正在工作。服务器的 HTTP 响应是什么?
  • UI 仍未重定向到主机名,但 API 在内部配置为指向主机名。所以当我尝试从 UI 访问 API 时,对 API 的请求(带有主机名)显示 302

标签: redirect virtualhost apache


【解决方案1】:

好的。您缺少重写条件

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

如果您不包含此条件,即使使用主机名也会重定向

【讨论】:

  • 除 HTTP_HOST 之外的 URL 的其余部分。最好使用 RewriteRule ^(.*)$ ayz-abc.mysite.com$1 [R=301,L]
【解决方案2】:

试试这个:

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

你也可以看到重写日志,see here

【讨论】:

  • 我已经尝试使用它,但仍然遇到同样的错误。还有Ankit,在浏览器中,它仍然只显示IP地址..它不会是主机名吗?
  • 重定向永久xx.xx.xx.xx/mainayz-abc.mysite.com/main可以吗?
【解决方案3】:

这对我有用。在apache的httpd.conf中添加配置

CASE-1:当用户点击http://XX.XX.XX.XX/mainhttp://ayz-abc.mysite.com/main 时,它应该被重定向到https://ayz-abc.mysite.com/main

配置:

#
# 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:当用户点击https://XX.XX.XX.XX/main时,它应该被重定向到https://ayz-abc.mysite.com/main

配置:

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

    如果您不使用 API,而只是希望浏览器和爬虫访问 URL 而不是 IP 地址,那么您可以使用 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>
    

    它的优点是响应 301 HTTP 状态,表示“请使用您将来重定向到的 url”,这有助于搜索引擎。如果您将网站移至新域,则应使用相同的解决方案。

    【讨论】:

      【解决方案5】:

      这会将所有对 IP 的请求重定向到您域中的类似地址

      <IfModule mod_rewrite.c>
      
      RewriteEngine on
      
      RewriteCond %{HTTP_HOST} ^12\.34\.56\.78$
      
      RewriteRule ^/(.*)$  https://ayz-abc.mysite.com/$1 [L,R=301]
      
      </IfModule>
      

      【讨论】:

        【解决方案6】:

        如果您使用的是 https 域,请添加以下内容:

        # 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
        

        我们在网站上使用 https 重定向插件。上面的代码块是由插件生成的,我们只在代码块中添加了两行。下面两行负责将 IP 设置为域重定向:

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

        这里 ^XX.XX.XX.XX$ 是您的 IP 地址,请将其替换为:^12.34.56.78$ 为您的服务器 IP。

        谢谢

        【讨论】:

          猜你喜欢
          • 2017-02-20
          • 2013-07-28
          • 2015-09-02
          • 2018-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-27
          • 2016-07-16
          相关资源
          最近更新 更多