问题描述

长时间的潜行者 – 第一次海报。

我的客户有一个 CakePHP 开发的网站,一个安装在/blog /目录下的 wordpress 博客。

我们来说主域名是 http://www.realdomain.com,博客是 http://www.realdomain.com/blog/

他们没有自己的 SSL 证书,所以他们使用我的公司。假设安全网址是 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,它将我重定向到完美的安全网址。

但是,当我登录到安全网站时,WordPress 会尝试从中加载 JavaScript 和样式

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

这导致问题,因为主站点没有 SSL 证书,因此不会从 https://realdomain.com 加载任何内容

还有什么我失踪的吗?

解决方案是.htaccess 规则?将所有 「https://realdomain.com」 路由到"https://realdomain.maindomain.com 的规则 「?

我会支付任何人谁可以帮助我修复它 20 美元。 I’ve Google’D 直到我的心内容,我不知道还能做什么。

非常感谢!

最佳解决方法

只是为了保持好东西清楚的是,我已经发布了这个新的答案。让我们重新设置游戏场& 请遵循以下说明,就好像它是一个闪亮的新安装 (忽略以前的答案中的所有代码和建议) 。

在您的 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_*常量。

次佳解决方法

我把我的头撞在墙上,试图将 wordpress 上的管理功能移到单独的服务器上。我以为我只是补充说,有两个主机名在编辑器中打破了”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]

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。