htaccess + 301 редирект https

punchos

Новичок
htaccess + 301 редирект https

нужен 301 редирект

RewriteCond %{HTTP_HOST} ^mysite.ru [nc]
RewriteRule .* http://www.mysite.ru%{REQUEST_URI} [R=301,nc]

он отрабатывает хорошо...но сайт поддерживает https
правило отрабатывает и со страниц https перекидывает на http....
как бы сделать так чтобы 301 редирект с https корректно отрабатывал?
 

x-yuri

Новичок
если у тебя на всех страницах https должен использоваться, то ты же сам в .htaccess пишешь "перекидывать на http"

p.s. для чего твой RewriteCond, кстати? Если пользователь введет www.mysite.ru, то redirect'а быть не должно?
 

punchos

Новичок
2x-yuri : нет...не на всех страницах https должен быть...https только в случае если пользователь переключился на https режим, а по умолчанию http.
RewriteCond для того чтобы проверить есть ли в URL поддамен WWW и если нету то чтоб принудительно перекидывало на www.mysite.ru 301 редиректом...
и это должно отрабатывать как на http так и на https
 

x-yuri

Новичок
значит тебе нужно не жестко протокол прописывать (http), а использовать переменные среды (SERVER_PROTOCOL по идее)
 

punchos

Новичок
к сожалению не работает...вот такой пример
RewriteCond %{HTTP_HOST} ^mysite.ru [nc]
RewriteRule .* {SERVER_PROTOCOL}://www.mysite.ru%{REQUEST_URI} [R=301,nc]

при попытке запросить страницу http://mysite.ru
редиректит вот сюда
http://mysite.ru/E:/www/mysite.ru/{SERVER_PROTOCOL}://www.mysite.ru/
 

SiMM

Новичок
А с какой кстати ему работать, если Вы не соблюдаете синтаксис?
 

Gremboloid

инженера Гр...
punchos открываешь документацию по апачу и внимательно читаешь раздел RewriteCond
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

делать условие с помощью одной специальной переменной или можешь костыли через на порты делать (вроде 80 для http и 443 для https) , но это тоже описано по ссылке выше
 

punchos

Новичок
c RewriteCond разобрался

вот такой блок должен работать...
RewriteCond %{HTTP_HOST} ^mysite.ru [nc]
RewriteCond %{SERVER_PORT} ^80 [nc]
RewriteRule .* http://www.mysite.ru%{REQUEST_URI} [R=301,nc]
RewriteCond %{HTTP_HOST} ^mysite.ru [nc]
RewriteCond %{SERVER_PORT} ^443 [nc]
RewriteRule .* https://www.mysite.ru%{REQUEST_URI} [R=301,nc]
но не работает...потому что в %{SERVER_PORT} всегда порт 80 вне зависимости от того на Http или https
это от того что на сервере стоит nginx и за ssl отвечает он...
добавил в конфиг апача такую строчку
proxy_set_header X-Forwarded-Port $server_port;
в php переменная $_SERVER['HTTP_X_FORWARDER_PORT'] имеет коректное значение 80/443....а вот в .htaccess переменной %{HTTP_X_FORWARDER_PORT} как не было так и нет...
ни кто ни знает как сделать так чтоб она там появилась?
 

Gremboloid

инженера Гр...
а HTTPS пробовал?
Will contain the text "on" if the connection is using SSL/TLS, or "off" otherwise. (This variable can be safely used regardless of whether or not mod_ssl is loaded).
 

punchos

Новичок
пробовал то же самое....он всегда off
в $_SERVER вообще нет ни одной записи по поводу SSL...
потому что за ssl не апач отвечает а nginx
 

dimagolov

Новичок
punchos, а зачем nginx отвечает на HTTPS? у тебя много статики отдается через HTTPS? пусть HTTPS слушает apache на прямую.
 

punchos

Новичок
dimagolov, да нет не много...так просто админ настроил....наверное единственное решение это действительно настроить чтобы apache напрямую https слушал...
Спасибо!
 
Сверху