2012-05-07 35 views
42

Tôi đã xem qua các câu hỏi hiện có, nhưng tôi chưa thực sự bắt gặp bất kỳ câu hỏi nào phù hợp với tôi.http đến https thông qua .htaccess

Tôi hiện đang chạy trang web có chứng chỉ SSL bảo mật. Nó có thể được truy cập tại https://www.example.co.uk một vấn đề là trang web cũng có thể được truy cập tại http://www.example.co.uk - Tôi không muốn điều này là có thể. Tôi cần nó để chuyển hướng từ http đến https.

Tôi đã tìm thấy một đoạn mã này để sử dụng trong tệp .htaccess.

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example.co.uk [NC] 
RewriteRule ^(.*)$ https://example.co.uk/$1 [L,R=301] 

này hoạt động tốt khi người dùng nhập vào example.co.uk vào thanh địa chỉ của họ, nhưng tôi cũng cần phải thêm một tuyên bố có điều kiện của một số loại để nếu người dùng nhập vào 'www.example.co.uk 'hoặc' http://www.example.co.uk '.

Tôi đã thử sử dụng lượt thích [OR], nhưng điều này sẽ tạo ra lỗi máy chủ.

Bất kỳ trợ giúp và đề xuất nào được đánh giá cao.

Chúc mừng.

+2

bản sao có thể có của [Cách chuyển hướng tất cả yêu cầu HTTP sang HTTPS] (http://stackoverflow.com/q/4083221/), [Buộc SSL/HTTPS với Zend Framework và mod_rewrite] (http://stackoverflow.com/q/1329647 /), [Force SSL và WWW in .htaccess] (http://webmasters.stackexchange.com/q/8833) – outis

Trả lời

96

Hãy thử như sau:

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

Ngoài ra, bạn cũng có thể chuyển hướng dựa trên số cổng, ví dụ:

RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] 

này sẽ chuyển hướng tất cả yêu cầu nhận được trên cổng 80 đến HTTPS.

+1

Cảm ơn rất nhiều @BluesRockAddict - Công cụ tuyệt vời. Làm việc một điều trị! – fitzilla

+2

cảm ơn! cách dễ nhất để di chuyển (sử dụng các tệp .htaccess) từ http: // đến https: // (khi bạn nhận được chứng chỉ SSL) –

+0

Để làm rõ, bạn có điền vào SERVER_NAME hoặc để nó như được viết không? – AlxVallejo

3

Hãy thử điều này, tôi đã sử dụng nó và nó hoạt động tốt

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
8

Thêm đoạn mã sau vào tập tin .htaccess.

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

thay đổi example.com với tên miền trang web của bạn

URL redirect hướng dẫn có thể được tìm thấy từ đây - Redirect non-www to www & HTTP to HTTPS using .htaccess file

+0

Câu trả lời được chấp nhận không phù hợp với tôi, nhưng câu trả lời này hoạt động tốt. :) – ReeCube

+0

Tôi trùng lặp REQUEST_URI trên 404 – fdrv

+0

Đây là câu trả lời duy nhất làm việc – kikuyu1

0

Để chuyển hướng http://example.comhayhttp://www.example.comđểhttps://www.example.com một cách đơn giản , bạn có thể sử dụng Quy tắc sau trong htaccess:

RewriteEngine on 

RewriteCond %{HTTPS} off 
RewriteCond www.%{HTTP_HOST} ^(?:www\.)?(www\..+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [NE,L,R] 

[Tested]

% {} REQUEST_SCHEME biến có sẵn từ apache 2.4, biến này chứa giá trị của chương trình được yêu cầu (http hoặc https), trên apache 2.4 bạn có thể sử dụng các nguyên tắc sau:

RewriteEngine on 


RewriteCond %{REQUEST_SCHEME} ^http$ 
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC] 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R] 
0

Có những cách tốt hơn và an toàn hơn để đảm bảo rằng tất cả lưu lượng truy cập của bạn vượt quá https. Ví dụ: thiết lập hai máy chủ ảo và chuyển hướng tất cả lưu lượng truy cập từ số http tới máy chủ https của bạn. Đọc thêm về điều này trong this answer here on security.stackexchange.com.

Khi thiết lập máy chủ ảo để chuyển hướng, bạn có thể gửi trạng thái 301 (chuyển hướng vĩnh viễn) để trình duyệt hiểu rằng tất cả các yêu cầu sau sẽ được gửi đến máy chủ https nơi nó được chuyển hướng đến. Do đó, không có yêu cầu http nào khác được thực hiện sau phản hồi chuyển hướng đầu tiên.

Bạn cũng nên kiểm tra cẩn thận các câu trả lời đã cho vì với quy tắc viết lại sai, bạn có thể mất tham số truy vấn từ các yêu cầu gửi đến của mình.

0

Nếu bạn muốn chuyển hướng HTTP thành HTTPS và muốn thêm www với mỗi URL, sử dụng htaccess dưới

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

nó đầu tiên sẽ chuyển hướng HTTP thành HTTPS và sau đó nó sẽ chuyển hướng đến www.

0

Tôi thử tất cả các mã ở trên nhưng mọi mã không hoạt động cho trang web của tôi. Sau đó tôi thử mã này và mã này đang chạy hoàn hảo cho trang web của tôi. Bạn có thể sử dụng Quy tắc sau trong htaccess:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine On 

//Redirect http to https 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

//Redirect non-www to www 
RewriteCond %{HTTP_HOST} ^example.com [NC] 
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 

</IfModule> 

Thay đổi example.com bằng tên miền của bạn và xin lỗi vì tiếng anh kém của tôi.

Các vấn đề liên quan