Переадресация .htaccess 301 для всех https на http, КРОМЕ ОДНОЙ СТРАНИЦЫ - PullRequest
12 голосов
/ 17 января 2010

Вот код, который у меня сейчас есть в моем файле .htaccess:

Options +FollowSymLinks 
RewriteEngine on
RewriteBase / 
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

В основном мне нужно вот что:

  1. перенаправить все экземпляры "example.com" на "www.example.com"
  2. перенаправить все экземпляры " https // www.example.com" на " http : //www.example.com" , за исключением 1 страницы !!!! (в случае, если это имеет значение, имя файла этой страницы - payment.php)

Код, который у меня есть выше, работает, но для 1-й страницы, которая должна быть https, она переписывает URL-адрес в http. Эта страница должна быть https.

Спасибо, Chris

Ответы [ 4 ]

10 голосов
/ 17 января 2010

Apache / 2.2.6 (Win32) mod_ssl / 2.2.8 OpenSSL / 0.9.8g PHP / 5.2.6

Я проверил это локально, все варианты использования работают нормально. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Redirect from example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL on for payments
RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/payments\.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but payments
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/payments\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

* 1008. www , его попросили принять сертификат безопасности вашего домена без www.

Например (ДА = запрос на принятие сертификата, НЕТ - напротив):

1) https://www.asdf.com/payments.php - YES (www.asdf.com)
2) http://www.asdf.com/phpinfo.php - NO
3) https://asdf.com/phpinfo.php - YES (asdf.com)
4) https://www.asdf.com/phpinfo.php - NO

Я попытался изменить порядок правил в .htaccess, но безуспешно. Если кто-нибудь найдет лучшее решение, оно будет высоко оценено.

5 голосов
/ 17 января 2010

в дополнение к отличному решению Уильяма, вы можете отменить запрос uri где-нибудь до https rewriterule

RewriteCond %{REQUEST_URI} !^/?payments\.php
0 голосов
/ 02 августа 2010

Это был хороший пост, и он, кажется, правильно перенаправляет на http, но я хочу что-то вроде следующего

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

#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^products https://www.site.com/products/ [R=301,L]

# Disable SSL on pages other than payments.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^products
RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]

# Require SSL on payments.php
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^products\/?$
RewriteRule ^(.*)$ https://www.site.com/$1 [R=301,L]


RewriteCond $1 !^(index\.php|images|js|css|static|img|payment|robots\.txt|blank.gif)
RewriteRule ^(.*)$ index.php/$1 [L]

мой URL-адрес http://www.sitename.com, а конечный слеш не обязателен что мне нужно, если нет текста, как продукты в URL, то он должен http: // и если в uri есть строковые произведения, то это должно быть https://

как это сделать ... когда я пытался это происходит в цикле ... цикл перенаправления.

Я использую фреймворк codeigniter и удалил index.php из URL.

поэтому, если произошло что-то вроде http://sitename.com/products, я хочу, чтобы оно было https://sitename.com/products

и если в URL нет товаров, его следует перенаправить на http://

0 голосов
/ 17 января 2010
# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Redirect from example.com to www.example.com
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Disable SSL on pages other than payments.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^payments\.php$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# Require SSL on payments.php
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} ^payments\.php$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Я не проверял, но что-то подобное должно работать

Редактировать: Обновлено

...