.htaccess 301 перенаправить для всех https на http EXCEPT ONE PAGE
Вот код, который у меня есть в моем файле .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]
Я знаю, что джека переписывает... и все другие сообщения по этому вопросу действительно не соответствуют моим критериям, и я недостаточно знаю об этом языке, чтобы попытаться расшифровать его.
В основном мне нужно следующее:
- перенаправить все экземпляры "example.com" на "www.example.com"
- перенаправить все экземпляры " https//www.example.com" на " http://www.example.com", за исключением 1 страницы!!!! (в случае, если это имеет значение, имя файла этой страницы - payment.php)
Код, который у меня выше, работает, но для 1 страницы, на которой мне нужно быть https, он переписывает URL-адрес на http. Эта страница должна быть https.
Спасибо,
Крис
Ответы
Ответ 1
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 без успеха. Если кто-то найдет лучшее решение, он будет высоко оценен.
Ответ 2
в дополнение к отличному решению william, вы можете отменить запрос uri где-то до https rewriterule
RewriteCond %{REQUEST_URI} !^/?payments\.php
Ответ 3
Это был хороший пост, и он, похоже, перенаправляет на 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]
my url http://www.sitename.com, а конечная косая черта необязательна
что мне нужно, если в тексте нет текста, подобного продуктам, тогда ему нужно http://
и если в uri есть строковые продукты, то это должно быть https://
как это сделать...
когда я попробовал, он перейдет в цикл цикла перенаправления.
Я использую работу frameignign frame, и я удалил index.php из URL.
так что если что-то вроде http://sitename.com/products произошло, я хочу, чтобы он был https://sitename.com/products
и если в URL-адресе нет продуктов, он должен перенаправить на http://
Ответ 4
# 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]
Я не тестировал его, но что-то подобное должно работать
Изменить: Обновлено