У нас есть домен, где каждая страница настроена на https в .htaccess. Существует и второй домен для ирландской версии сайта, где у нас нет сертификата, поэтому нам нужно, чтобы страницы были установлены на 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

Буду благодарен за любую помощь, не смог найти ни одного подобного сценария. Спасибо.

0
Tony Payne 22 Мар 2017 в 23:06

2 ответа

Лучший ответ

Есть несколько способов сделать это. Предполагая, что вы дифференцируетесь на основе заголовка хоста (скажем, используя уникальные виртуальные хосты на основе 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
Avi 23 Мар 2017 в 17:21

Отредактированный код для отражения решения Avi. По какой-то причине он все еще не форсирует www, и он не форсирует https для сайта .com. К сожалению, работая под 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]
0
Tony Payne 24 Мар 2017 в 12:28