Sử dụng tên miền khác cho SSL


7

lurker thời gian dài - poster lần đầu tiên.

Một khách hàng của tôi có một trang web được phát triển trong CakePHP và một blog wordpress được cài đặt trong thư mục / blog /.

Giả sử url của tên miền chính là http://www.realdomain.comvới blog http://www.realdomain.com/blog/.

Họ không có chứng chỉ SSL riêng nên họ sử dụng các công ty của tôi. Giả sử URL an toàn làhttps://realdomain.maindomain.net/blog/

Tôi có đoạn mã sau trong tệp wp-config.php của mình:

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

Khi tôi truy cập /wp-login.php, nó sẽ chuyển hướng tôi đến URL an toàn hoàn hảo.

Tuy nhiên, khi tôi đăng nhập vào trang web bảo mật, WordPress sẽ cố gắng tải JavaScripts và kiểu từ

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

Điều này gây ra sự cố vì trang web chính không có chứng chỉ SSL và kết quả là không tải bất cứ thứ gì từ https://realdomain.com

Có điều gì khác tôi đang thiếu?

Là giải pháp một quy tắc .htaccess? Một quy tắc định tuyến tất cả " https://realdomain.com" đến "https://realdomain.maindomain.com"?

Tôi sẽ trả cho bất cứ ai 20 đô la, người có thể giúp tôi sửa nó. Tôi đã Google cho đến khi trái tim tôi hài lòng và tôi không biết mình có thể làm gì khác.

Cám ơn rất nhiều!

Câu trả lời:


10

Chỉ để giữ cho mọi thứ tốt đẹp và rõ ràng, tôi đã đăng bài này như một câu trả lời mới. Hãy đặt lại sân chơi và làm theo các hướng dẫn bên dưới như thể đó là một bản cài đặt mới sáng bóng (bỏ qua tất cả các mã & đề xuất trong các câu trả lời trước).

Trong bạn 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 );

Và trong 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 );

?>

Tôi đã đề xuất sử dụng plugin Phải sử dụng ( mu -plugins), vì chúng được tự động tải mà không cần phải kích hoạt trước.

Nếu bạn muốn nó là một plugin tiêu chuẩn, bạn sẽ cần thêm các FORCE_SSL_*hằng số sau khi kích hoạt.


Câu trả lời tốt đẹp. Tôi không thể làm việc này với wordpress 3.3.2 và hai tên miền này: myblog.tld && ssl.company.tld / myblog.tld . Bạn có đề nghị nào không?
tonymarschall

Tôi có thể xác nhận rằng giải pháp này vẫn hoạt động trên Wordpress 3.5.1. Cảm ơn bạn.
Jeff Strunk

Tôi cũng có thể xác nhận rằng giải pháp này vẫn hoạt động trên Wordpress 4.2.3
Rodrigo

3

Tôi đập đầu vào tường cố gắng di chuyển các chức năng quản trị viên trên wordpress sang một máy chủ riêng biệt. Tôi nghĩ rằng tôi chỉ cần thêm vào rằng có hai tên máy chủ sẽ phá vỡ chức năng "xem trước" trong trình chỉnh sửa, và vì vậy bạn cần sửa đổi .htaccess của mình để làm cho nó hoạt động trở lại.

#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]

0

WordPress sẽ buộc HTTPS cho tất cả các tài sản nếu giao thức hiện tại là SSL. Tôi đang giả sử realdomain.maindomain.netlà một bí danh cho realdomain.com?

Nếu vậy, hãy đặt URL nội dung của bạn thành http://realdomain.maindomain.net/blog/wp-content.

Tất cả tài sản sẽ được phục vụ từ URL này và tự động viết lại thành HTTPS khi được yêu cầu.

Nếu (vì bất kỳ lý do gì) bạn chỉ muốn cung cấp nội dung từ tên miền bí danh bên trong quản trị viên (tức là thông qua HTTPS), bạn có thể thay đổi URL nội dung một cách có điều kiện:

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' );

CẬP NHẬT: Hãy thử điều này, mà không có bất kỳ bộ lọc trước hoặc định nghĩa bổ sung nào;

/* 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' );

Cảm ơn! Có, realdomain.maindomain.net là bí danh của realdomain.com Tôi đã thêm những gì bạn đề xuất vào tệp wp-config.php của tôi và nó vẫn cố lấy nội dung từ realdomain.com khi bạn đăng nhập vào wp .php, dạng POST gửi đến https://realdomain.maindomain.netnhưng một khi bạn đã đăng nhập, nó sẽ nhận được một số nội dung từ đúng tên miền và sau đó nội dung từ tên miền sai. i.imgur.com/pcIrO.png Đây là hình ảnh về những gì đang xảy ra (bỏ qua những <br> đó, chỉ cần thêm chúng để tạo khoảng cách cho bạn). Vấn đề là /wp-admin/load-scripts.php và / wp-gộp / Khác với nó hoạt động!
Kingsley

Bạn vẫn đang xác định WP_SITEURL?
TheDeadMote

định nghĩa ('WP_SITEURL', ' realdomain.maindomain.net/blog' ); xác định ('WP_CONTENT_URL', ' realdomain.com/blog/wp-content' ); Có bạn, tôi đã sử dụng ở trên + chức năng bạn đã đăng, đã thử nó trong hàm.php và wp-config và không có gì
Kingsley

Thêm add_filter( 'includes_url', 'use_alias_for_ssl' );vào hỗn hợp
TheDeadMedic

Xin chào Pal, Đã thêm gồm_url vào hàm.php trong thư mục chủ đề của tôi, nó không có tác dụng gì. Chỉ cần xác nhận, trong wp-config.php của tôi, WP_SITEURL = phiên bản bảo mật WP_CONTENTURL = phiên bản bình thường Đó là tất cả những thứ mới trong wp-config. Trong các hàm.php Hàm trong bài đăng đầu tiên của bạn được theo sau bởi 3 add_filters .. Điều đó có đúng không? Điều tương tự đang xảy ra trong ảnh chụp màn hình trong bài viết thứ 2 của tôi. Nó làm tôi đau đầu nghiêm trọng. Tôi không nghĩ nó sẽ khó đến thế và tôi nghĩ chỉ có tôi là người gặp vấn đề ... Tôi chưa đọc bất cứ điều gì có vấn đề tương tự :(
Kingsley

0

Tôi đã cập nhật wp-config.php và WordPress MU chưa được cài đặt, vì vậy tôi đã tạo thư mục mu-plugins trong thư mục / wp-content /. Một vài điều đã xảy ra: Khi xem phía công chúng, nó đã tải một số tệp từ https://realdomain.maindomain.net/blogvà một số từ http://realdomain.com. Như thế này:

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

Tuy nhiên, URL bài đăng blog và hình thu nhỏ đã liên kết chính xác. Đó chỉ là 4 tệp được lấy từ trang https: //

Trên trang đăng nhập wp, URL của biểu mẫu là chính xác, https: // và nó đã tải trang web bảo mật .. Tuy nhiên, tôi không thay đổi gì cả. Nó vẫn lấy trong 7 <script>& <link>tập tin từ https://realdomain.com.

Các URL trên tất cả các <forms>POST đến trang web https: // chính xác ..

Cảm ơn tất cả sự giúp đỡ của bạn cho đến nay, tôi thực sự đánh giá cao nó!


0

Để cho phép quản trị viên truy cập http://blog.example.com thông qua https://ssl.example.com/wp-admins/blog/wp-login.php với cấu hình Apache thuần túy để bạn không phụ thuộc vào plugin và cập nhật Wordpress Bạn có thể muốn...

... sử dụng mod_proxy trên máy chủ ảo apache HTTPS để chuyển tiếp lưu lượng, đảm bảo ProxyPreservehost bị tắt để tên máy chủ trong các câu lệnh proxy được gửi qua máy chủ wordpress. Sau đó, mod_substolarship được sử dụng (đảm bảo bật nó lên) để sửa các liên kết bị hỏng quay trở lại từ 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/

Để proxy ngược hoạt động, bạn cần chỉ định IP bên trong của máy chủ lưu trữ blog.example.com. Giải pháp này đảm bảo điều này sẽ hoạt động ngay cả khi máy chủ ngược dòng (10.0.0.4) có một số máy chủ ảo dựa trên tên.

10.0.0.4 blog.example.com

Để biết thêm chi tiết, xem:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.