用于将 ip 重定向到主机名的 Apache httpd.conf

Posted

技术标签:

【中文标题】用于将 ip 重定向到主机名的 Apache httpd.conf【英文标题】:Apache httpd.conf for redirecting ip to hostname 【发布时间】: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 【参考方案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/main 或http://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。

谢谢

【讨论】:

以上是关于用于将 ip 重定向到主机名的 Apache httpd.conf的主要内容,如果未能解决你的问题,请参考以下文章

Apache禁用本地主机重定向

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http

Apache HTTPS 到 HTTPS 重定向

通过将主机名放在主机文件中来加速 Apache 重定向

将 https ip 重定向到共享主机中 htaccess 中的域

使用 Apache 将内部 IP 从 HTTP 重定向到 HTTPS