web-dev-qa-db-fra.com

Utiliser un domaine différent pour SSL

lurker de longue date - première affiche.

Un de mes clients a un site Web développé dans CakePHP et un blog wordpress installé dans le répertoire/blog /.

Supposons que l'URL du domaine principal est http://www.realdomain.com, le blog étant http://www.realdomain.com/blog/.

Ils ne disposent pas de leur propre certificat SSL, ils utilisent donc mes entreprises. Disons que l'URL sécurisée est https://realdomain.maindomain.net/blog/

J'ai le code suivant dans mon fichier wp-config.php:

define('WP_SITEURL', 'https://realdomain.maindomain.net/blog');
define('WP_CONTENT_URL', 'http://www.realdomain.com/blog/wp-content');
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

Quand je vais sur /wp-login.php, cela me redirige vers l'URL sécurisée qui est parfaite.

Cependant, lorsque je me connecte au site sécurisé, WordPress essaie de charger des scripts JavaScript et des styles à partir de

`http**s**://realdomain.com`

Ce qui pose problème car le site principal ne possède pas de certificat SSL et ne charge donc rien à partir de https://realdomain.com

Y a-t-il autre chose qui me manque?

La solution est-elle une règle .htaccess? Une règle qui routait tous "https://realdomain.com" à "https://realdomain.maindomain.com "?

Je paierai 20 $ à quiconque pourra m'aider à le réparer. J'ai consulté Google jusqu'à ce que mon coeur soit satisfait et je ne sais pas ce que je peux faire d'autre.

Merci beaucoup!

7
Kingsley

Juste pour que tout soit clair et clair, j'ai posté ceci comme une nouvelle réponse. Réinitialisons le terrain de jeu et suivons les instructions ci-dessous comme s'il s'agissait d'une nouvelle installation brillante (ignorez tout le code et les suggestions des réponses précédentes).

Dans votre wp-config.php

define( 'WP_SITEURL', 'http://www.realdomain.com/blog' );
define( 'SSL_DOMAIN_ALIAS', 'realdomain.maindomain.net' );

define( 'FORCE_SSL_LOGIN', true );
define( 'FORCE_SSL_ADMIN', true );

Et dans wp-content/mu-plugins/ssl-domain-alias.php

<?php

/**
 * Plugin Name: SSL Domain Alias
 * Plugin URI: http://wordpress.stackexchange.com/questions/38902
 * Description: Use a different domain for serving your website over SSL, set with <code>SSL_DOMAIN_ALIAS</code> in your <code>wp-config.php</code>.
 * Author: TheDeadMedic
 * Author URI: http://wordpress.stackexchange.com/users/1685/thedeadmedic
 *
 * @package SSL_Domain_Alias
 */

/**
 * Swap out the current site domain with {@see SSL_DOMAIN_ALIAS} if the
 * protocol is HTTPS.
 *
 * This function is not bulletproof, and expects both {@see WP_SITEURL} and
 * {@see SSL_DOMAIN_ALIAS} to be defined.
 *
 * @todo The replacement is a simple string replacement (for speed). If the
 * domain name is matching other parts of the URL other than the Host, we'll
 * need to switch to a more rigid regex.
 *
 * @param string $url
 * @return string
 */
function _use_ssl_domain_alias_for_https( $url )
{
    static $domain;
    if ( ! isset( $domain ) )
        $domain = defined( 'WP_SITEURL' ) && defined( 'SSL_DOMAIN_ALIAS' ) ? parse_url( WP_SITEURL, PHP_URL_Host ) : false;

    if ( $domain && strpos( $url, 'https' ) === 0 )
        $url = str_replace( $domain, SSL_DOMAIN_ALIAS, $url );

    return $url;
}
add_filter( 'plugins_url', '_use_ssl_domain_alias_for_https', 1 );
add_filter( 'content_url', '_use_ssl_domain_alias_for_https', 1 );
add_filter( 'site_url', '_use_ssl_domain_alias_for_https', 1 );

?>

J'ai suggéré d'utiliser un plugin Must-Use ( mu - plugins), car ceux-ci sont chargés automatiquement sans qu'il soit nécessaire de les activer au préalable.

Si vous préférez que ce soit un plugin standard, vous devrez ajouter les constantes FORCE_SSL_* after activation.

10
TheDeadMedic

Je me suis cogné la tête contre le mur en essayant de déplacer les fonctions d’administrateur de wordpress sur un serveur séparé. Je pensais simplement ajouter que le fait d'avoir deux noms d'hôte annule la fonction "Aperçu" de l'éditeur. Vous devez donc modifier votre fichier .htaccess pour que cela fonctionne à nouveau.

#special fixes on previews when wordpress sends user to the public blog & we want the hidden one.
RewriteCond %{HTTP_Host} ^public.site.com$ [NC]
RewriteCond %{QUERY_STRING} .*(/?preview=true.*) [OR]
RewriteCond %{QUERY_STRING} (.*&preview=true.*) [NC]
RewriteRule ^(.*)$ http://secure.site.com/$1$2  [L,R=301]
3
Eric Oberle

WordPress forcera HTTPS pour tous les actifs si le protocole actuel est SSL. Je suppose que realdomain.maindomain.net est un alias pour realdomain.com?

Si tel est le cas, définissez votre URL de contenu sur http://realdomain.maindomain.net/blog/wp-content.

Tous les actifs seront servis à partir de cette URL et automatiquement réécrits en HTTPS si nécessaire.

Si (pour quelque raison que ce soit), vous ne souhaitiez jamais que servir du contenu du domaine avec alias à l'intérieur de l'administrateur (c'est-à-dire via HTTPS), vous pouvez modifier l'URL du contenu de manière conditionnelle:

define( 'WP_CONTENT_URL', 'http://www.realdomain.com/blog/wp-content' );

function use_alias_for_ssl( $url )
{
    if ( is_ssl() )
        $url = str_replace( 'www.realdomain.com', 'realdomain.maindomain.net', $url );
    return $url;
}
add_filter( 'content_url', 'use_alias_for_ssl' );
add_filter( 'plugins_url', 'use_alias_for_ssl' );

UPDATE: Essayez ceci, sans aucun des filtres précédents ou des définitions supplémentaires;

/* wp-config.php */
define( 'WP_SITEURL', 'https://realdomain.maindomain.net/blog' );
define( 'FORCE_SSL_LOGIN', true );
define( 'FORCE_SSL_ADMIN', true );

/* wp-content/mu-plugins/any-filename.php */
add_filter( 'blog_option_siteurl', '_config_wp_siteurl' );
0
TheDeadMedic

Pour activer l'accès administrateur pour http://blog.example.com via https://ssl.example.com/wp-admins/blog/wp-login.php avec la configuration Apache pure, vous ne dépendez pas des plugins et mises à jour de Wordpress que vous voudrez peut-être ...

... utilisez mod_proxy sur un hôte virtuel HTTPS Apache pour transférer le trafic, assurez-vous que ProxyPreserveHost est désactivé pour que les noms d'hôte figurant dans les instructions proxy soient envoyés au serveur wordpress. Ensuite, mod_substitute est utilisé (assurez-vous de l'activer) pour réparer les liens brisés qui reviennent de wordpress.

<Location /wp-admins/blog/>

  AddOutputFilterByType SUBSTITUTE text/html
  AddOutputFilterByType SUBSTITUTE text/css
  AddOutputFilterByType SUBSTITUTE application/javascript
  AddOutputFilterByType SUBSTITUTE application/json
  Substitute "s|http://blog.example.com|https://ssl.example.com/wp-admins/blog|i"
  Substitute "s|blog.example.com\\\/|blog.example.com\\/wp-admins\\/blog\\/|i"
  Substitute "s|'/wp-admin|'/wp-admins/blog/wp-admin|i"
  Substitute "s|\"/wp-admin|\"/wp-admins/blog/wp-admin|i"
  Substitute "s|'/wp-includes|'/wp-admins/blog/wp-includes|i"
  ProxyPassReverseCookiePath / /wp-admins/blog/

</Location>

ProxyPass /wp-admins/blog/ http://blog.example.com/
ProxyPassReverse /wp-admins/blog/ http://blog.example.com/

Pour que le proxy inverse fonctionne, vous devez spécifier l'adresse IP interne du serveur hébergeant blog.example.com. Cette solution garantit que cela fonctionnera même si le serveur en amont (10.0.0.4) dispose de plusieurs hôtes virtuels nommés.

10.0.0.4 blog.example.com

Pour plus de détails, voir:

http://tec.libertar.se/how-to-Host-wordpress-admin-on-a-seperate-domain-and-subfolder/

0
Kristofer

J'ai mis à jour le fichier wp-config.php et WordPress MU n'est pas installé. J'ai donc créé le dossier mu-plugins dans le dossier/wp-content /. Quelques événements se sont produits: lors de l’affichage du côté public, certains fichiers ont été chargés à partir de https://realdomain.maindomain.net/blog et d’autres à partir de http://realdomain.com. Comme ça:

<script src="http://www.realdomain.com/blog/wp-content/plugins/commentluv/js/commentluv.js?ver=3.2.1" type="text/javascript">

<link href="https://realdomain.maindomain.net/blog/xmlrpc.php?rsd" title="RSD" type="application/rsd+xml" rel="EditURI">

<link href="https://realdomain.maindomain.net/blog/wp-includes/wlwmanifest.xml" type="application/wlwmanifest+xml" rel="wlwmanifest">

Cependant, les URL et les vignettes des articles de blog étaient liées correctement. Il ne restait que 4 fichiers qui ont été récupérés à partir du site https: //

Sur la page wp-login, l'URL du formulaire était correcte, https: // et le site sécurisé était chargé. Cependant, je n'ai rien changé. Il extrait toujours 7 fichiers <script> & <link> de https://realdomain.com.

Les URL sur tous les <forms> tous POST vers le bon site https: //.

Merci pour votre aide jusqu'ici, je l'apprécie vraiment!

0
Kingsley