2012-02-11 3 views
2

У меня есть один файл PHP, который обрабатывает обработку кредитных карт. Он начинается как форма ввода номера кредитной карты, затем становится экраном подтверждения (с указанием номера кредитной карты), а затем еще раз обрабатывает и отображает результаты. Все три загрузки будут выполнены с помощью PHP-представлений (я понимаю, что подтверждение может быть лучше, чем Javascript, но я его не написал). Это единственный файл в каталоге, который обрабатывает кредитные карты, и поэтому он является единственным, для которого требуется соединение httpS.Как заставить HTTPS использовать один файл? (PHP)

Я попытался выполнить это с помощью массива $ _SERVER, просматривая протокол, используемый для подключения из префикса SCRIPT_URI (или другой записи), но ни один из них не имел префикс.

Есть ли простой способ сделать это с файлом .htaccess в том же каталоге? Как это сделать для ТОЛЬКО одного файла? Если есть какой-либо другой простой способ, как мне это сделать?

Извините за вопросы, но мои поиски до сих пор здесь не нашли рабочего решения, и я боюсь, что не знаю, что такое лучшая практика.

Спасибо!

+0

Если вы хотите, чтобы это было полезно, убедитесь, что ваши ссылки на эту страницу верны. См. Http://stackoverflow.com/a/9105894/372643 – Bruno

ответ

9

В начале страницы PHP, который делает всю вашей обработку кредитных карт, вы можете добавить следующее:

Он перенаправляет обратно к себе, за исключением использования https, если он был первым загружен более http. Конечно, для вашего домена вам все равно нужен сертификат SSL.

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url 
    $url = 'https://' . $_SERVER['HTTP_HOST'] 
         . $_SERVER['REQUEST_URI']; 

    header('Location: ' . $url); 
    exit; 
} 

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

2

Поместите следующий код в файл .htacces в папке:

RewriteEngine On 
RewriteCond %{SERVER_PORT} !443 
RewriteRule (.*) https://www.example.com/require-secure/ [R] 

Стреляет, если порт не 443 (443 для HTTPS) и перенаправляет на https://www.example.com/require-secure/.

Примечание: mod_rewrite необходим, но в основном доступны

+0

O/P запросил файл _single_, чтобы шаблон правила был чем-то вроде «RewriteRule» secure-file $ https://www.example.com/secure -file [R = 301] 'Также более условно основывать условие на% {HTTPS} :-) – TerryE

2

Во-первых, почему вы хотите, чтобы целенаправленно сделать весь сайт использовать незащищенное протокол? У вас действительно есть такой жесткий бюджет производительности, что вы не можете переварить накладные расходы TLS? Преждевременная оптимизация - это проклятие человечества.

Кроме того, говоря, что сценарий обработки кредитных карт является единственным, который требует HTTPS, подразумевает, что ваша система входа в систему отправляет пароли в ящике. Это не просто жадно, а просто плохой дизайн.

Это в стороне, правильным решением является использование mod_rewrite для принудительного перенаправления на HTTPS по этой ссылке. Альтернативное решение, если у вас нет возможности управлять конфигурацией сервера вообще (даже через .htaccess), заключается в том, чтобы ваш PHP-скрипт сначала проверял протокол, и если это не HTTPS, вы можете перенаправить и завершить.

+1

Как я уже сказал, я знаю, что есть много вещей, которые нужно делать по-другому, но я не знаю, у меня есть контроль, чтобы изменить все, что нужно сделать.Просто пытаясь заставить все работать лучше всего здесь, и поощрять обратную смену, когда это необходимо. Является ли «mod_rewrite» решением, которое вы помещаете в файл .htaccess локального каталога? Каков синтаксис для одного файла? В противном случае, как я могу проверить PHP протокол? Я бы предпочел сделать это правильно, конечно, но, как я сказал: у меня нет полного контроля. Благодаря! – Bing

Смежные вопросы