Удалить www для всего сайта, принудительно установить https для определенных каталогов и http для остальных? - PullRequest
13 голосов
/ 16 ноября 2010

Во-первых, я хотел бы удалить www.с моего доменного имени

http://www.example.com => http://example.com

Я также хотел бы, чтобы некоторые каталоги были безопасными (https), а остальные остаются http

http://example.com/login => https://example.com/login

Очевидно, что он должен работать для всех условий, например, если кто-то набирает:

http://www.example.com/login => https://example.com/login

Также, когда люди уходят со страницы входа в систему, она возвращается к http.В настоящее время в .htaccess есть следующее, которое выполняется автоматически с помощью программного обеспечения, которое я использую, и я полагаю, что оно должно быть там для работы:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ./index.php

Любые идеи о том, как я могу достичь мечтыконтролировать все эти вещи?

Заранее спасибо!

================== *

@Гамбо Следуя вашим советам, это мой полный .htaccess

RewriteEngine On


# remove www from host
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

# force HTTPS
RewriteCond %{HTTPS} =off
RewriteRule ^(login)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force HTTP
RewriteCond %{HTTPS} =on
RewriteRule !^(login)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ./index.php


Options -Indexes

Переход к http://example/login все еще переходит к http://example/index.php, когда он должен перейти к https://example/login Есть ли у менянеправильный порядок?

Ответы [ 4 ]

26 голосов
/ 16 ноября 2010

Попробуйте эти правила:

# remove www from host
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]

# force HTTPS
RewriteCond %{HTTPS} =off
RewriteRule ^(login|foo|bar|…)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# force HTTP
RewriteCond %{HTTPS} =on
RewriteRule !^(login|foo|bar|…)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вы также можете добавить некоторые дополнительные условия, чтобы изменить протокол только для запросов GET и HEAD, но не для запросов POST.

2 голосов
/ 10 сентября 2016

Этот код работает для меня:

<IfModule mod_rewrite.c>

   RewriteEngine on

   RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
   RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

   RewriteCond %{HTTPS} !=on
   RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

</IfModule>
0 голосов
/ 23 февраля 2016

После прочтения всей этой временной шкалы я получил сообщение об ошибке из-за следующей ошибки: Мой веб-сайт (c4dprime.com) был прикреплен https: в браузере Mozilla Firefox. Google и Internet Explorer показывают адрес домена как http: (реальная проблема в Firefox). Я не хотел, чтобы https: для моего домена в любом браузере, потому что одно неизвестное перенаправление, связанное с моим доменом по https: (Причина этой ошибки) после установки следующего плагины в WordPress, (Easy Redirect для SSL) .... Я сказал каждому не использовать плагины низкого уровня для WordPress.

В любом случае! После прочтения многих статей и руководств по этой теме через поисковик Google. Теперь я счастлив сказать, что я решил эту проблему из этого поста советов. Помните одну вещь обо мне, я новичок в этой форме и WordPress.

Этот совет - полная помощь для меня

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://yoursite.com/$1 [L,R=301]

После редактирования или некоторых изменений в моем файле .htaccess после кода, который я сейчас использую, удалось решить эту ошибку.

AddHandler c4d-prime .com

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteBase /
RewriteRule ^$ http://www.c4dprime.com/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
0 голосов
/ 16 ноября 2010

удалить www (проверено):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://yoursite.com/$1 [L,R=301]

редирект (не проверено):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} \/login/?.*\ HTTP [NC]
RewriteRule ^(.*)$ https://yoursite.com/login [L,R=301]
...