ryan
  • 0
Эксперт

Использовать https для источника изображения

  • 0

Мой сайт требует использования https для всего img src HTML.

Это функция WordPress, которую я использую для отображения изображений:

<img src="'.get_bloginfo("template_url").'/images/thumb-default.gif" />

Это выводит http img src — как я могу преобразовать его в https?

Share
  1. WordPress проверяет возвращаемое значение is_ssl() перед созданием URL-адресов с использованием get_bloginfo() . Если функция возвращает значение true, она создает URL-адреса https. Если он возвращает false, он создает URL-адреса http.

    Из исходников WordPress…

    function is_ssl() {
        if ( isset($_SERVER['HTTPS']) ) {
            if ( 'on' == strtolower($_SERVER['HTTPS']) )
                return true;
            if ( '1' == $_SERVER['HTTPS'] )
                return true;
        } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
            return true;
        }
        return false;
    }
    

    Итак… если запрос был сделан через https или если запрос поступил через порт 443, то get_bloginfo() будет возвращен https:// URL-адрес. На самом деле, если вы все равно принудительно используете https, вы должны принудительно перенаправлять все запросы на порт 80 (http) на порт 443 (https)… но это проблема конфигурации сервера, а не проблема WordPress.

    В качестве альтернативы вы можете подключиться к фильтру и заменить http на https…

    Просто используйте:

    function replace_http( $original ) {
        // use preg_replace() to replace http:// with https://
        $output = preg_replace( "^http:", "https:", $original );
        return $output;
    }
    
    add_filter( 'template_url', 'replace_http' );
    
    • 0
  2. Проверяли ли вы это при запросе страницы через http или https ссылку? Что is_ssl() возвращается для вас?

    На данный момент у меня нет стека с поддержкой SSL для тестирования, но я уверен, что функции WP, которые объединяют ссылки, должны знать о SSL и выводить правильную версию.

    • 0
  3. Использование функции home_url() автоматически обнаружит ssl и изменит протоколы.

    • 0
  4. Чтобы добавить к исправлению, предложенному EAMann, я внес некоторые изменения в версию 3.5:

    add_filter( 'template_directory_uri', function( $original ) {
        $output = preg_replace( "/^http:/i", "https:", $original );
        return $output;
    });
    

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

    • 0

Оставить ответ

You must login to add an answer.