对SSL使用不同的域

时间:2012-01-14 作者:Kingsley

长期潜伏者-第一次海报。

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

假设主域的url为http://www.realdomain.com, 随着博客的发展http://www.realdomain.com/blog/.

他们没有自己的SSL证书,所以他们使用我的公司。假设安全URL是https://realdomain.maindomain.net/blog/

我的wp配置中有以下代码。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登录时。php,它将我重定向到完美的安全URL。

然而,当我登录到安全站点时,WordPress会尝试从

`http**s**://realdomain.com`
这会导致问题,因为主站点没有SSL证书,因此无法从https://realdomain.com

我还缺什么吗?

是解决方案a。htaccess规则?“路由全部的规则”https://realdomain.com“收件人"https://realdomain.maindomain.com“?

谁能帮我修一下,我就付20美元。我一直在谷歌上搜索,直到我心满意足,我不知道我还能做什么。

非常感谢!

5 个回复
SO网友:TheDeadMedic

只是为了让事情保持美好&;很清楚,我已经发布了一个新的答案。让我们重新设置比赛场地&;按照以下说明进行操作,就像它是一个全新的安装一样(忽略前面答案中的所有代码和建议)。

在您的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 );

?>
我建议使用必用插件(mu-插件),因为这些插件是自动加载的,无需首先激活。

如果您希望它是一个标准插件,则需要添加FORCE_SSL_* 激活后的常数。

SO网友:Eric Oberle

我试图将wordpress上的管理功能移动到一个单独的服务器上,结果撞到了墙上。我想我要补充的是,有两个主机名会破坏编辑器中的“预览”功能,因此需要修改。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]

SO网友:TheDeadMedic

如果当前协议是SSL,WordPress将强制所有资产使用HTTPS。我想realdomain.maindomain.net 是的别名realdomain.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\' );

SO网友:Kingsley

我更新了wp配置。php和WordPress MU没有安装,所以我在/wp content/folder中创建了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://site检索到4个文件

在wp登录页面上,表单URL是正确的,https://。。然而,我没有改变任何事情。它仍然有7个<script> &;<link> 文件来自https://realdomain.com.

所有<forms> 所有帖子都发布到正确的https://site。。

谢谢你迄今为止的帮助,我真的很感激!

SO网友:Kristofer

为启用管理访问权限http://blog.example.com 通过https://ssl.example.com/wp-admins/blog/wp-login.php 使用纯Apache配置,您不需要依赖Wordpress插件和更新,您可能需要。。。

。。。在HTTPS apache虚拟主机上使用mod\\u proxy转发流量,确保ProxyPreserveHost已关闭,以便将代理语句中的主机名发送到wordpress服务器。然后使用mod\\u replacement(确保打开它)修复从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/
要使反向代理工作,您需要指定承载博客的服务器的内部IP。实例com。此解决方案可确保即使上游服务器(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/

结束