如何将安全和非安全根重定向到登录页面

时间:2015-01-19 21:07:12

标签: apache .htaccess redirect

我的目标 :如果用户导航到根网址(http://localhost)或根网址的安全版本(https://localhost ),然后将它们重定向到登录页面的安全版本(https://localhost/login/index.html)。

我的问题 :通过导航到上述网址(http://localhost重定向到{{3},非安全根的重定向工作正常但是,安全版本不起作用,我从apache收到404错误。

我试图通过在Apache的httpd.conf文件中使用Apache RewriteEngine来做到这一点。我所拥有的是:

#Turn on redirection
RewriteEngine On

# IF someone is trying to access the root directory
RewriteCond %{HTTP_HOST} !^(https://%{HTTP_HOST})?$ [OR]
RewriteCond %{HTTP_HOST} !^(http://%{HTTP_HOST})?$

# Redirect them to the login screen via SSL
RewriteRule ^/$ https://%{HTTP_HOST}/login/index.html [R=301]

以上配置应该使用以下逻辑:

if ( address == SERVER_ROOT ){
    redirectToLoginPageWithSSL();
} else if ( address == HTTPS_SERVER_ROOT ){
    redirectToLoginPageWithSSL();
}

我在Google / SO上搜索过,并找到了很多关于如何将根目录重定向到其他页面的答案,但似乎无法找到有关如何将安全根目录重定向到其他页面的任何内容。< / p>

谢谢, 麦克

1 个答案:

答案 0 :(得分:1)

如果您的规则在httpd.conf文件中,请确保规则是SSL vhost 非SSL vhost的一部分。它们会有所不同,并且具有不同的配置容器。您无法在非SSL配置块中与SSL请求进行匹配。此外,%{HTTP_HOST}变量主机,没有&#34; http://&#34;。

所以你需要的唯一规则就是:

#Turn on redirection
RewriteEngine On

# Redirect them to the login screen via SSL
RewriteRule ^/$ https://%{HTTP_HOST}/login/index.html [R=301]

在SSL和非SSL配置/ vhost容器中。它会出现在以下情况中:

<VirtualHost (something)>


</VirtualHost>

另一种方法是在htaccess文件中执行此操作。假设您的SSL和非SSL站点都指向相同的文档根文件夹,您可以使用单个htaccess文件来影响这两者。而你所需要的只是:

RewriteEngine On
RewriteRule ^$ https://%{HTTP_HOST}/login/index.html [L,R=301]

请注意,规则正则表达式中没有针对htaccess文件中的规则的前导/