long Time Lurker - das erste Mal 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 http://www.realdomain.com/blog/
lautet.
Sie haben kein eigenes SSL-Zertifikat und verwenden daher meine Unternehmen. Angenommen, die sichere URL lautet https://realdomain.maindomain.net/blog/
Ich habe den folgenden Code in meiner wp-config.php-Datei:
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 zur 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 https://realdomain.com
lädt.
Fehlt mir noch etwas?
Ist die Lösung eine .htaccess-Regel? Eine Regel, die alle "https://realdomain.com
" an "https://realdomain.maindomain.com
"weiterleitet?
Ich bezahle jedem 20 Dollar, der mir helfen kann, das Problem zu beheben. Ich habe bis zu meinem Herzen mit Google gearbeitet und weiß nicht, was ich sonst noch tun kann.
Vielen Dank!
Um die Dinge schön und klar zu halten, habe ich dies als neue Antwort gepostet. Lassen Sie uns das Spielfeld zurücksetzen und die folgenden Anweisungen befolgen, als wäre es eine glänzende Neuinstallation (ignorieren Sie alle Codes und 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 die Verwendung eines Must-Use-Plugins ( mu - Plugins) vorgeschlagen, da diese automatisch geladen werden, ohne dass sie zuvor aktiviert werden müssen.
Wenn Sie es als Standard-Plugin bevorzugen, müssen Sie die FORCE_SSL_*
-Konstanten after activation hinzufügen.
Ich schlug meinen Kopf gegen die Wand und versuchte, die Admin-Funktionen von WordPress auf einen separaten Server zu übertragen. Ich dachte, ich füge nur hinzu, dass zwei Host-Namen die "Vorschau" -Funktion im Editor beeinträchtigen. Sie müssen also Ihre .htaccess-Datei ändern, damit das 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]
WordPress erzwingt HTTPS für alle Assets, wenn das aktuelle Protokoll SSL ist. Ich gehe davon aus, dass realdomain.maindomain.net
ein Alias für realdomain.com
ist.
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 (d. H. Über HTTPS) bereitstellen möchten, können Sie die Inhalts-URL unter folgenden Bedingungen ä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 einen der vorherigen Filter oder zusätzliche 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' );
So aktivieren Sie den Administratorzugriff für http://blog.example.com through https://ssl.example.com/wp-admins/blog/wp-login.php mit reiner Apache-Konfiguration Habe keine Abhängigkeit von Wordpress-Plugins und -Updates, die du vielleicht möchtest ...
... verwenden Sie mod_proxy auf einem virtuellen HTTPS-Apache-Host, um den Datenverkehr weiterzuleiten. Stellen Sie sicher, dass ProxyPreserveHost deaktiviert ist, damit die Hostnamen in den Proxy-Anweisungen an den WordPress-Server gesendet werden. Dann wird mod_substitute verwendet (stellen Sie sicher, dass es eingeschaltet ist), um die defekten Links zu reparieren, 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-Adresse 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/
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 Anzeigen der öffentlichen Seite wurden bestimmte Dateien aus https://realdomain.maindomain.net/blog
und einige aus http://realdomain.com
geladen. 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 ordnungsgemäß verknüpft. Es waren nur 4 Dateien, die von der https: // Site abgerufen wurden
Auf der wp-Login-Seite war die Formular-URL korrekt, https: // und es wurde die sichere Site geladen. Jedoch habe ich nichts geändert. Es werden immer noch 7 <script>
- und <link>
-Dateien von https://realdomain.com
abgerufen.
Die URLs aller <forms>
all POST zur richtigen https: // Site.
Vielen Dank für all Ihre Hilfe, ich weiß das sehr zu schätzen!