将一个域重定向到https第二个域http

时间:2017-03-22 20:06:55

标签: .htaccess redirect mod-rewrite

我们有一个域名,其中每个页面都设置为.htaccess中的https。 爱尔兰版本的网站还有第二个域名,我们没有证书,因此我们需要将页面设置为http。 我们还希望确保将两个域都设置为www。 为了进一步使问题复杂化,用户可以登录网站的一部分,我们希望这些网页是安全的。我们计划检测爱尔兰域名和登录页面并重定向到主域名。

我可以在.htaccess中对其中的各个部分进行编码,但我不确定如何编写整个场景,而不会让它变得非常复杂,混乱且难以调试。我也不想不必要地重新定位页面。

总结如下:

(www.)example.com -> https://www.example.com
(www.)example.ie -> http://www.example.ie
(www.)example.ie/login.php -> https://www.example.com/login.php

我会感激任何帮助,但未能找到任何类似的情况。感谢。

2 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。假设您根据主机标头进行区分(例如,使用基于IP的唯一虚拟主机),您可以执行以下操作:

# Special case for Irish login page
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.ie$
RewriteRule ^/login\.php$ https://www.example.com/login.php [R]

# By default use HTTPS
RewriteRule .* - [E=CORRECT_REQUEST_SCHEME:https]
# For (www.)example.ie use HTTP
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.ie$
RewriteRule .* - [E=CORRECT_REQUEST_SCHEME:http]

# Ensure www prefix
RewriteCond %{HTTP_HOST} ^example\.(com|ie)$
RewriteRule ^(/.*)$ %{ENV:CORRECT_REQUEST_SCHEME}://www.example.%1/$1 [R]

# Ensure correct request scheme
RewriteCond %{HTTPS} =off
RewriteCond %{ENV:CORRECT_REQUEST_SCHEME} =https
RewriteRule ^(/.*)$ https://%{HTTP_HOST}/$1 [R]

答案 1 :(得分:0)

编辑代码以反映Avi的解决方案。出于某种原因,它仍然没有强制www,并且它不会强制https用于.com网站。不幸的是,在我们的生产Web服务器上运行Apache 2.2.29,我们不能使用“REQUEST_SCHEME”:

RewriteEngine on
RewriteBase /
Options +FollowSymLinks

## ERROR DOCUMENT PROCESSING ##
ErrorDocument 403 /404.php
ErrorDocument 404 /404.php
ErrorDocument 410 /410.php
## ERROR DOCUMENT PROCESSING ##

## TRAP REQUESTS FOR IMAGE DOES NOT EXIST ##
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ 
RewriteRule .* /products/sq/250sq/no_image_available.jpg [R]

## FORCE URL CHANGES FOR DOMAINS ##

# Special case for Irish login page
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.ie$
RewriteRule ^/login\.php$ https://www.example.com/login.php [R]

# By default use HTTPS
RewriteRule .* - [E=CORRECT_REQUEST_SCHEME:https]
# For (www.)example.ie use HTTP
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.ie$
RewriteRule .* - [E=CORRECT_REQUEST_SCHEME:http]

# Ensure www prefix
RewriteCond %{HTTP_HOST} ^example\.(com|ie)$
RewriteRule ^(/.*)$ %{ENV:CORRECT_REQUEST_SCHEME}://www.example.%1/$1 [R]

# Ensure correct request scheme
RewriteCond %{HTTPS} =off
RewriteCond %{ENV:CORRECT_REQUEST_SCHEME} =https
RewriteRule ^(/.*)$ https://%{HTTP_HOST}/$1 [R]