Перенаправление .htaccess 301 для всего https к http КРОМЕ ОДНОЙ СТРАНИЦЫ

Вот код, который я в настоящее время имею в моем .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 страницы!!!! (в случае, если это имеет значение, имя файла той страницы является payments.php),

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

Спасибо, Chris

12
задан William 22 January 2010 в 03:51
поделиться

4 ответа

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]

ВАЖНО! Когда пользователь переходит с любой страницы https с www на любую https страницу без www, его просят принять сертификат безопасности вашего не-www домена.

Например (YES = запрос на принятие сертификата, NO - напротив):

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 безуспешно. Если кто-нибудь найдет лучшее решение, это будет высоко оценено.

10
ответ дан 2 December 2019 в 21:02
поделиться

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

RewriteCond %{REQUEST_URI} !^/?payments\.php
5
ответ дан 2 December 2019 в 21:02
поделиться
# 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]

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

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

-1
ответ дан 2 December 2019 в 21:02
поделиться

Это был хороший пост, и он, кажется, правильно перенаправляет на 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 есть строка products, тогда она должна быть https: //

как это сделать ... когда я попробовал, он перейдет в цикл ... цикл перенаправления.

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

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

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

0
ответ дан 2 December 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: