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

  • Автор темы Автор темы punchos
  • Дата начала Дата начала

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 корректно отрабатывал?
 
если у тебя на всех страницах https должен использоваться, то ты же сам в .htaccess пишешь "перекидывать на http"

p.s. для чего твой RewriteCond, кстати? Если пользователь введет www.mysite.ru, то redirect'а быть не должно?
 
2x-yuri : нет...не на всех страницах https должен быть...https только в случае если пользователь переключился на https режим, а по умолчанию http.
RewriteCond для того чтобы проверить есть ли в URL поддамен WWW и если нету то чтоб принудительно перекидывало на www.mysite.ru 301 редиректом...
и это должно отрабатывать как на http так и на https
 
значит тебе нужно не жестко протокол прописывать (http), а использовать переменные среды (SERVER_PROTOCOL по идее)
 
к сожалению не работает...вот такой пример
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/
 
А с какой кстати ему работать, если Вы не соблюдаете синтаксис?
 
punchos открываешь документацию по апачу и внимательно читаешь раздел RewriteCond
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

делать условие с помощью одной специальной переменной или можешь костыли через на порты делать (вроде 80 для http и 443 для https) , но это тоже описано по ссылке выше
 
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} как не было так и нет...
ни кто ни знает как сделать так чтоб она там появилась?
 
а 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).
 
пробовал то же самое....он всегда off
в $_SERVER вообще нет ни одной записи по поводу SSL...
потому что за ssl не апач отвечает а nginx
 
punchos, а зачем nginx отвечает на HTTPS? у тебя много статики отдается через HTTPS? пусть HTTPS слушает apache на прямую.
 
dimagolov, да нет не много...так просто админ настроил....наверное единственное решение это действительно настроить чтобы apache напрямую https слушал...
Спасибо!
 
Сверху