2010-01-06 40 views
14

Tôi muốn có:htaccess redirect cho phi www cả http và https

  • http://example.com chuyển hướng tới: http://www.example.com
  • https://example.com chuyển hướng tới: https://www.example.com

Và bất cứ điều gì đó là http://whatever.example.com KHÔNG nối thêm www như http://www.whatever.example.com.

Trả lời

35

Hãy thử quy tắc này:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Dưới đây là một lời giải thích:

  1. Các bài kiểm tra điều kiện đầu tiên nếu trường tiêu đề HTTP chủ có định dạng cần thiết (chứa chính xác một thời gian).
  2. Các bài kiểm tra điều kiện thứ hai nếu giá trị nối các giá trị của biến HTTPS (giá trị onoff) và s (do đó, hoặc ons hoặc offs) bằng ons và nắm bắt được s. Điều này có nghĩa là nếu %{HTTPS}s đánh giá là ons, nhóm phù hợp đầu tiên là s và trống theo cách khác.
  3. Quy tắc sẽ khớp với tất cả các yêu cầu vì mọi chuỗi đều có điểm bắt đầu (được đánh dấu bằng ^) và chuyển hướng chúng đến giá trị được đánh giá là http%1://www.%{HTTP_HOST}%{REQUEST_URI} nếu cả hai điều kiện đều đúng. Trường hợp %1 là nhóm phù hợp đầu tiên của điều kiện trước đó (s nếu HTTPS và trống nếu không), %{HTTP_HOST} là HTTP Máy chủ của yêu cầu và %{REQUEST_URI} là đường dẫn URL tuyệt đối được yêu cầu.
+0

Bạn cũng có thể giải thích điều này không? Đó là loại tiếng Trung cho tôi ... dòng đầu tiên là để bắt máy chủ 2 phần (như: example.com). Dòng thứ hai làm gì và làm thế nào? –

+0

Có vẻ tốt, nhưng đang tạo ra 500 thông báo lỗi nội bộ cho tôi. – TRiG

+0

@TRiG: Vui lòng tham khảo nhật ký lỗi của máy chủ. – Gumbo

2

Hãy thử thêm RewriteCond vào tệp .htaccess của bạn để chỉ bắt SSL - sau đó thực hiện tương tự cho http chuẩn.

RewriteCond %{HTTPS} on 
Các vấn đề liên quan