web-dev-qa-db-ja.com

SSLに別のドメインを使用する

久しぶりに - 初めてのポスター。

私のクライアントはCakePHPで開発されたウェブサイトと/ blog /ディレクトリにインストールされたワードプレスのブログを持っています。

メインドメインのURLがhttp://www.realdomain.comで、ブログがhttp://www.realdomain.com/blog/であるとしましょう。

彼らは自分のSSL証明書を持っていないので、彼らは私の会社を使っています。安全なURLがhttps://realdomain.maindomain.net/blog/であるとしましょう

私の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);

/wp-login.phpに行くと、完璧な安全なURLにリダイレクトされます。

しかし、私が安全なサイトにログインすると、WordPressはからJavaScriptとスタイルをロードしようとします。

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

メインサイトにはSSL証明書がなく、その結果https://realdomain.comから何も読み込まれないため、これは問題を引き起こします。

私が欠けている何か他にありますか?

解決策は.htaccessルールですか?すべての "https://realdomain.com"を"https://realdomain.maindomain.comにルーティングしたルールは?

私はそれを直すのを手伝うことができる誰でも20ドル払うつもりです。私は私の心に満足するまでGoogleをやってきましたが、他に何ができるかわかりません。

本当にありがとう!

7
Kingsley

物事を素晴らしく明確にするために、これを新しい回答として投稿しました。活躍の場をリセットし、あたかもそれが光沢のある新しいインストールであるかのように以下の指示に従ってください(以前の答えの中のすべてのコードと提案を無視してください)。

あなたの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 );

そして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 );

?>

私はMust-Useプラグイン(mu - plugins)を使用することをお勧めします。これらは最初にアクティブにする必要なしに自動ロードされるからです。

標準のプラグインにしたい場合は、FORCE_SSL_*定数 after activationを追加する必要があります。

10
TheDeadMedic

私は、ワードプレスの管理機能を別のサーバーに移動させようとして壁に頭をぶつけた。 2つのホスト名を持つとエディタの "preview"機能が壊れることを付け加えたいと思いました。そのため、.htaccessを修正してそれを再び機能させる必要があります。

#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

現在のプロトコルがSSLの場合、WordPressはすべてのアセットに対してHTTPSを強制します。 realdomain.maindomain.netrealdomain.comのエイリアスだと思いますか?

その場合は、コンテンツのURLをhttp://realdomain.maindomain.net/blog/wp-contentに設定してください。

すべてのアセットはこのURLから配信され、必要に応じて自動的にHTTPSに書き換えられます。

(何らかの理由で)管理者内のエイリアスドメインからのコンテンツのみを提供する場合(HTTPS経由)、コンテンツのURLを条件付きで変更できます。

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:これを試してみてください。前のフィルタも追加の定義もありません。

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

http://blog.example.com から https://ssl.exampleまでの管理者アクセスを有効にする。純粋なApache設定のあるcom/wp-admins/blog/wp-login.php なので、Wordpressプラグインやアップデートに依存しないようにしてください...

... HTTPS Apache仮想ホストでmod_proxyを使用してトラフィックを転送し、ProxyPreserveHostがOffになっていることを確認して、プロキシステートメントのホスト名がワードプレスサーバーに送信されるようにします。その後、mod_substituteを使用して(必ず有効にして)、ワードプレスから戻ってきたリンク切れを修正します。

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

リバースプロキシを機能させるには、blog.example.comをホストしているサーバーの内部IPアドレスを指定する必要があります。このソリューションは、アップストリームサーバー(10.0.0.4)に名前ベースの仮想ホストが複数ある場合でもこれが機能することを保証します。

10.0.0.4 blog.example.com

詳しくは、以下を参照してください。

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

0
Kristofer

Wp-config.phpを更新しましたが、WordPress MUがインストールされていないので、/ wp-content /フォルダにmu-pluginsフォルダを作成しました。いくつかのことが起こりました:公開側を見ると、https://realdomain.maindomain.net/blogから特定のファイルをロードし、http://realdomain.comから特定のファイルをロードしました。このような:

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

ただし、ブログ投稿のURLとサムネイルは正しくリンクされていました。 https://サイトから取得されたのは4ファイルだけでした。

Wp-loginページで、フォームのURLは正しかった、https://そしてそれは安全なサイトをロードした。しかし、私は何も変更しなかった。それはまだ7つの<script><link>ファイルをhttps://realdomain.comから引き込みます。

正しいhttps://サイトへのすべての<forms> all POSTのURL。

これまでのすべてのあなたの助けをありがとう、私は本当に感謝しています!

0
Kingsley