如果主机名不是,htaccess 重定向

Posted

技术标签:

【中文标题】如果主机名不是,htaccess 重定向【英文标题】:htaccess redirect if hostname is NOT 【发布时间】:2016-12-29 07:05:54 【问题描述】:

我正在运行具有多个虚拟主机的服务器,并且 phpMyadmin 被设置为别名,可以通过 anydomain.com/phpmyadmin 访问。我想使用 .htaccess 重定向规则,这样如果 server-admin-url 上未访问 phpmyadmin,则访问者将被重定向到 Google。

正确的 URL 是:https://server.domain.com:9090/phpmyadmin

有人可以帮帮我吗?

谢谢!

【问题讨论】:

【参考方案1】:

最简单的方法

RewriteEngine On
RewriteCond %HTTP_HOST !^server.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.google.com/$1 [L,R]

也许您还想检查端口,然后使用

RewriteCond %SERVER_PORT !^9090$ [OR]
RewriteCond %HTTP_HOST !^server.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.google.com/$1 [L,R]

更新

再次阅读您的问题,我看到您还尝试从 http 切换到 https。

我建议添加一个检查 https 是否关闭:

RewriteCond %HTTPS !=on [OR]
RewriteCond %HTTP_HOST !^server.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.google.com/$1 [L,R]

如果你的 VirtualHost 配置了 https 你应该特别注意VirtualHost matching works

【讨论】:

嗨,freedev。非常感谢。如果 phpMyadmin 加载到不同的主机上,重定向会很好地工作。但如果我只是使用 server.domain.com/phpmyadmin,即没有 9090 端口,它仍然会加载。我的主要问题是如果没有端口,它将无法获得正确的 SSL 证书。这里最好的解决方案是什么? 我认为真正的问题是如何将这两个条件包含为“非此即彼”。我试着先把那个带端口的,然后在最后加上[OR],但它不起作用。我做错了什么? @zkvvoob 您是否尝试添加第二条规则?就像我的回答一样,但在这种情况下,只在 RewriteRule 之前添加 RewriteCond %SERVER_PORT !9090。它应该可以正常工作(不使用任何[OR] 是的,我已经做到了。就像我说的,如果域错误,重定向工作正常,但如果端口丢失 - 它不起作用,即 phpMyadmin 仍然加载(但 SSL 证书不正确)。 这应该可以,我已经在我的回答中更新了RewriteCond,只是为了更清楚,无论如何建议启用重写调试***.com/questions/9632852/…

以上是关于如果主机名不是,htaccess 重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nginx 将数百个主机名重定向到其他主机名

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

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

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

虚拟主机怎么做全站301重定向跳转?

.htaccess子域名重定向无法正常工作