Buộc HTTPS bằng .htaccess trên trang web với Wordpress trong thư mục con


1

Tôi không thể làm cho tệp .htaccess của mình hoạt động để buộc lưu lượng HTTPS

Cấu trúc trang web mà tôi thấy nếu tôi ftp đến nhà cung cấp dịch vụ lưu trữ của mình:

/
  domains
    mydomainname.com
      public_html
        blog
  • Các tập tin cho trang web của tôi bắt đầu trong public_html( index.htmlvv)
  • Tôi có cài đặt WordPress trong blog
  • Cài đặt Wordpress đã được đặt thành https: (Cài đặt chung được đề cập https://www.mydomainname.com/blogdưới dạng URL Wordpress).
  • Chứng chỉ SSL hoạt động tốt nếu tôi đi đến miền
  • Ban đầu chỉ có một .htaccesstrong blog, có chứa:

# BEGIN WordPress

RewriteEngine On
RewriteBase / blog /
RewriteRule ^ index.php $ - [L]
RewriteCond% {REQUEST_FILENAME}! -F
RewriteCond% {REQUEST_FILENAME}! -D
RewriteRule. /blog/index.php [L]

# END WordPress

Tất cả các loại hướng dẫn tôi thấy đề cập rằng tôi nên thêm phần này vào đầu .htaccess:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.mydomainname.com/$1 [R,L]

.. và rằng tôi nên đặt tệp này 'vào thư mục gốc của trang web của tôi'.

Nếu tôi không có .htaccesstệp (khác) :

  • Tôi có thể duyệt đến https://www.mydomainname.com, theo liên kết vào blog WP và duyệt quanh đó, tất cả https:
  • Nếu tôi truy cập http://www.mydomainname.com, hãy theo liên kết vào blog WP, những liên kết này sẽ chuyển thành https:

Nếu tôi đặt một htaccess đã sửa đổi ở một số vị trí, tôi sẽ gặp các sự cố như (tùy thuộc vào .htaccessnội dung / vị trí tôi đang thử):

  • Nếu tôi đi đến www.mydomainname.comnó chuyển hướng đến https://www.mydomainname.comvà tôi nhận được "Máy chủ không tìm thấy"; hoặc là:
  • Không bắt buộc từ http: đến https:

Câu hỏi:

  • Nên .htaccessđặt trong mydomainname.comhoặc public_html(tức là thư mục nào nổi tiếng 'root của trang web của tôi')? Tôi đã thử cả hai.
  • cũng phải được đặt trong blog? Nếu vậy, họ có cần phải giống hệt nhau?
  • Các nội dung thích hợp của .htaccess(các) tập tin là gì?

Tôi đã thử tất cả các loại biến thể, nhưng không thể làm cho nó hoạt động - rõ ràng chưa phải là biến thể phù hợp.

FWIW: Tôi giả sử nhà cung cấp dịch vụ lưu trữ của tôi sử dụng Apache. Tôi không kiểm soát cấu hình của nó.


Bạn có nhớ rằng một số trình duyệt lưu trữ trang web và như vậy .htaccess có thể không chuyển hướng đúng không? Chrome đặc biệt điên rồ về điều này. Shift-F5 nên thực hiện tải lại lực lượng, nhưng đôi khi ngay cả điều đó không hoạt động và bạn thực sự phải xóa bộ nhớ cache thông qua menu chrome. Tôi đã bị choáng váng khi hoạt động chính xác như vậy và khi tôi thử nó trên một trình duyệt khác và tất cả đều hoạt động, cuối cùng tôi nhận ra rằng đó là bộ đệm đã chơi trò lừa tôi.
LPChip

Một khả năng đáng tiếc khác là nhà cung cấp của bạn có thể không cho phép .htaccesshoặc có thể không cho phép tất cả các tính năng có thể. Điều này đặc biệt đúng với lưu trữ được chia sẻ, nơi nhiều trang web của khách hàng được lưu trữ trên cùng một máy chủ.
jpaugh

@LPChip Tôi khởi động lại trình duyệt (và tôi chờ)
Jan Doggen

@jpaugh Nhà cung cấp của tôi cho phép htaccess. Một trong những trang hỗ trợ của họ đề cập đến ba dòng đó và cụm từ 'trong thư mục chính của trang web của bạn'
Jan Doggen

@JanDoggen Khởi động lại trình duyệt là không đủ để xóa bộ nhớ cache. Shift + F5 nên làm như vậy; bạn cũng có thể thử sử dụng một trình duyệt khác mà bạn thường không sử dụng; hoặc, bạn có thể thử xóa bộ nhớ cache. Đây là một ứng dụng rất tiện lợi. Disclaimer: không bao giờ sử dụng nó.
jpaugh

Câu trả lời:


1

Tôi cho rằng bạn nên đặt tệp .htaccess mới của mình vào thư mục public_html.

Hãy thử cách sau với mod_rewrite trong tệp .htaccess của bạn

RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf or .htaccess context

Ba dòng này cũng phải được thêm vào tệp .htaccess trong blogthư mục, sửa đổi RewriteRuleđể phản ánh thư mục con đó:

RewriteRule ^/?(.*) https://%{SERVER_NAME}/blog/$1 [R,L]

Cũng có thể hữu ích khi áp dụng mod_ssl để buộc SSL với Chỉ thị SSLRequireSSL :

Lệnh này cấm truy cập trừ khi HTTP qua SSL (tức là HTTPS) được bật cho kết nối hiện tại. Điều này rất tiện dụng bên trong máy chủ hoặc thư mục ảo hỗ trợ SSL để bảo vệ chống lại các lỗi cấu hình làm lộ ra những thứ cần được bảo vệ. Khi có lệnh này, tất cả các yêu cầu đều bị từ chối không sử dụng SSL. Hãy nhớ rằng điều này sẽ không tự chuyển hướng sang https.


Đây là cơ bản nó. Tôi đã thêm những gì cũng cần phải được thực hiện vào tệp .htaccess trong thư mục con blog
Jan Doggen

Bạn có thể qua tập tin htaccess của bạn từ thư mục blog của bạn không?
iamsmug

0

Đây là tóm tắt của bài viết Buộc HTTPS trên tất cả các trang trên trang web WordPress của bạn mô tả cách làm cho toàn bộ blog WordPress an toàn thông qua HTTPS.

  1. Buộc SSL cho quản trị viên và đăng nhập trang
    Thêm dòng sau vào wp-config.phptệp ở thư mục gốc của thư mục WordPress của bạn:
    define('FORCE_SSL_ADMIN', true);

  2. Đặt https trong Cài đặt
    Trong bảng điều khiển quản trị viên WordPress của bạn, hãy truy cập Settings -> Generalvà thay đổi cả hai URL để có https://thay vì http://:
    nhập mô tả hình ảnh ở đây

  3. Cập nhật .htaccess
    Thêm quy tắc viết lại trong .htaccesstệp được tìm thấy ở thư mục gốc của ứng dụng WordPress:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </IfModule>
    

Hai dòng đã được thêm vào nói rằng nếu cổng hiện tại không phải là 443, thì hãy viết lại URL để sử dụng HTTPS với chuyển hướng 301:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
  1. Làm trống tất cả bộ nhớ cache cho ứng dụng của bạn
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.