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

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

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

有人可以帮帮我吗?

谢谢!

【问题讨论】:

    标签: apache .htaccess redirect 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,只是为了更清楚,无论如何建议启用重写调试stackoverflow.com/questions/9632852/…
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2011-01-30
    • 2012-03-03
    • 2016-06-12
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多