问题描述
长时间的潜行者 – 第一次海报。
我的客户有一个 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。