Verwenden Sie eine andere Domain für SSL

7

Langzeitlurker - Erstes Poster.

Ein Kunde von mir hat eine in CakePHP entwickelte Website und ein WordPress-Blog im Verzeichnis / blog / installiert.

Angenommen, die URL der Hauptdomain lautet http://www.realdomain.com, wobei der Blog lautet http://www.realdomain.com/blog/.

Sie haben kein eigenes SSL-Zertifikat und verwenden daher meine Unternehmen. Angenommen, die sichere URL lautethttps://realdomain.maindomain.net/blog/

Ich habe den folgenden Code in meiner Datei 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);

Wenn ich zur Datei /wp-login.php gehe, werde ich zu der sicheren URL weitergeleitet, die perfekt ist.

Wenn ich mich jedoch bei der sicheren Site anmelde, versucht WordPress, JavaScripts und Stile von zu laden

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

Dies führt zu Problemen, da die Hauptwebsite kein SSL-Zertifikat hat und daher nichts von geladen wird https://realdomain.com

Fehlt mir noch etwas?

Ist die Lösung eine .htaccess-Regel? Eine Regel, die alle " https://realdomain.com" an "https://realdomain.maindomain.com"weiterleitete?

Ich bezahle jedem 20 Dollar, der mir helfen kann, das Problem zu beheben. Ich habe Google bis mein Herz zufrieden und ich weiß nicht, was ich sonst noch tun kann.

Vielen Dank!

Kingsley
quelle

Antworten:

10

Um die Dinge schön und klar zu halten, habe ich dies als neue Antwort veröffentlicht. Lassen Sie uns das Spielfeld zurücksetzen und die folgenden Anweisungen befolgen, als wäre es eine glänzende Neuinstallation (ignorieren Sie den gesamten Code und die Vorschläge in den vorherigen Antworten).

In deinem 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 );

Und in 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 );

?>

Ich habe vorgeschlagen, ein Must-Use-Plugin ( mu- Plugins) zu verwenden, da diese automatisch geladen werden, ohne dass sie zuerst aktiviert werden müssen.

Wenn Sie möchten, dass es sich um ein Standard-Plugin handelt, müssen Sie die FORCE_SSL_*Konstanten nach der Aktivierung hinzufügen .

TheDeadMedic
quelle
Gute Antwort. Ich kann dies nicht mit WordPress 3.3.2 und diesen beiden Domänen zum Laufen bringen : myblog.tld && ssl.company.tld / myblog.tld . Hast du irgendwelche Vorschläge?
Tonymarschall
Ich kann bestätigen, dass diese Lösung unter Wordpress 3.5.1 weiterhin funktioniert. Vielen Dank.
Jeff Strunk
Ich kann auch bestätigen, dass diese Lösung noch auf Wordpress 4.2.3
Rodrigo
3

Ich schlug meinen Kopf gegen die Wand und versuchte, die Verwaltungsfunktionen von WordPress auf einen separaten Server zu verschieben. Ich dachte, ich würde nur hinzufügen, dass zwei Hostnamen die "Vorschau" -Funktion im Editor beschädigen. Daher müssen Sie Ihren .htaccess ändern, damit dies wieder funktioniert.

#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]
Eric Oberle
quelle
0

WordPress erzwingt HTTPS für alle Assets, wenn das aktuelle Protokoll SSL ist. Ich nehme an, realdomain.maindomain.netist ein Alias ​​für realdomain.com?

Wenn ja, setzen Sie Ihre Inhalts-URL auf http://realdomain.maindomain.net/blog/wp-content.

Alle Assets werden über diese URL bereitgestellt und bei Bedarf automatisch in HTTPS umgeschrieben.

Wenn Sie (aus welchem ​​Grund auch immer) nur Inhalte aus der Alias-Domain innerhalb des Administrators bereitstellen möchten (dh über HTTPS), können Sie die Inhalts-URL bedingt ändern:

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: Versuchen Sie dies ohne die vorherigen Filter oder zusätzlichen Definitionen.

/* 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' );
TheDeadMedic
quelle
Vielen Dank! Ja, realdomain.maindomain.net ist ein Alias ​​für realdomain.com. Ich habe meiner wp-config.php-Datei hinzugefügt, was Sie vorgeschlagen haben, und es wird immer noch versucht, Inhalte von realdomain.com abzurufen, wenn Sie sich im wp-Login befinden .php, das Formular POSTs an, https://realdomain.maindomain.netaber sobald Sie sich angemeldet haben, werden einige Inhalte von der richtigen Domain und dann von der falschen Domain abgerufen . i.imgur.com/pcIrO.png Hier ist ein Bild davon, was passiert (ignorieren Sie diese <br>, fügen Sie sie nur hinzu, um den Abstand für Sie zu gewährleisten ). Das Problem ist /wp-admin/load-scripts.php und / wp-includes / Ansonsten funktioniert es!
Kingsley
Definierst du noch WP_SITEURL?
TheDeadMedic
define ('WP_SITEURL', ' realdomain.maindomain.net/blog' ); define ('WP_CONTENT_URL', ' realdomain.com/blog/wp-content' ); Ja Kumpel, ich habe die oben genannte + die von Ihnen gepostete Funktion verwendet, sie in der functions.php und der wp-config ausprobiert und nichts
Kingsley
In add_filter( 'includes_url', 'use_alias_for_ssl' );der Mischung
TheDeadMedic
Hallo Kumpel, Includes_url wurde zur functions.php in meinem Theme-Ordner hinzugefügt, es hatte keine Auswirkung. Nur um zu bestätigen, in meiner wp-config.php, WP_SITEURL = sichere Version WP_CONTENTURL = normale Version Das ist alles Neues in der wp-config. In der functions.php Die Funktion in Ihrem ersten Beitrag, gefolgt von 3 add_filters. Ist das richtig? Das gleiche passiert im Screenshot in meinem 2. Beitrag. Es bereitet mir ernsthafte Kopfschmerzen. Ich dachte nicht, dass es so schwer sein würde, und ich denke, dass nur ich das Problem habe ... Ich habe nichts mit einem ähnlichen Problem gelesen :(
Kingsley
0

Ich habe die Datei wp-config.php aktualisiert und WordPress MU ist nicht installiert. Deshalb habe ich den Ordner mu-plugins im Ordner / wp-content / erstellt. Ein paar Dinge sind passiert: Beim Betrachten der öffentlichen Seite wurden bestimmte Dateien von https://realdomain.maindomain.net/blogund einige von geladen http://realdomain.com. So was:

<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">

URLs und Miniaturansichten von Blogposts wurden jedoch korrekt verknüpft. Es waren nur 4 Dateien, die von der https: // Site abgerufen wurden

Auf der wp-Anmeldeseite war die Formular-URL https: // korrekt und die sichere Site wurde geladen. Ich habe jedoch nichts geändert. Es zieht immer noch 7 <script>& <link>Dateien aus https://realdomain.com.

Die URLs <forms>aller POSTs zur richtigen https: // Site.

Vielen Dank für all Ihre Hilfe, ich weiß das wirklich zu schätzen!

Kingsley
quelle
0

So aktivieren Sie den Administratorzugriff für http://blog.example.com über https://ssl.example.com/wp-admins/blog/wp-login.php mit reiner Apache-Konfiguration, dass Sie nicht von Wordpress-Plugins und -Updates abhängig sind Du möchtest vielleicht...

... verwenden Sie mod_proxy auf einem virtuellen HTTPS-Apache-Host, um den Datenverkehr weiterzuleiten. Stellen Sie sicher, dass ProxyPreserveHost deaktiviert ist, damit Hostnamen in den Proxy-Anweisungen an den WordPress-Server gesendet werden. Dann wird mod_substitute verwendet (stellen Sie sicher, dass es aktiviert ist), um die defekten Links zu beheben, die von WordPress zurückkommen.

<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/

Damit der Reverse-Proxy funktioniert, müssen Sie die interne IP des Servers angeben, auf dem blog.example.com gehostet wird. Diese Lösung stellt sicher, dass dies auch dann funktioniert, wenn der Upstream-Server (10.0.0.4) über mehrere namensbasierte virtuelle Hosts verfügt.

10.0.0.4 blog.example.com

Weitere Einzelheiten finden Sie unter:

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

Kristofer
quelle