chuyển hướng http sang https apache


156

Centos môi trường với apache

Đang cố gắng thiết lập chuyển hướng tự động từ http sang https

From manage.mydomain.com --- To ---> https://manage.mydomain.com 

Tôi đã thử thêm phần sau vào httpd.conf của mình nhưng không được

 RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

Có ý kiến ​​gì không?

Câu trả lời:


209

Tôi đã thực sự làm theo ví dụ này và nó đã làm việc cho tôi :)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>

Sau đó làm:

/etc/init.d/httpd restart


7
Lưu ý rằng điều này chỉ khả dụng nếu bạn có quyền truy cập vào tệp Virtualhost. Đây là phương pháp được đề nghị.
foochow

4
Sau khi thay đổi điều này trên httpd.conf, hãy khởi động lại máy chủ web apache. để nó sẽ phản ánh và xóa bộ nhớ cache trình duyệt của bạn quá.
Suriyan Suresh

2
Tôi muốn báo cáo rằng phương pháp này không hiệu quả với tôi với Ubuntu 12.4, tuy nhiên câu trả lời RewriteEngine được đề xuất đã thực hiện thủ thuật này.
Deano

2
bạn có phải làm lại không? tải lại ít phá hủy hơn và sẽ mang lại tập tin cấu hình mới. /etc/init.d/httpd reload| | service httpd reload
Rebecca Dessonville

3
vì mục đích là để chuyển hướng nó sang chế độ ssl, dòng DocumentRoot /usr/local/apache2/htdocsnày không còn cần thiết nữa
Abel Callejo

129
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html

hoặc là

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html


3
Đây là một giải pháp tốt hơn so với giải pháp được phê duyệt, bởi vì nó hoạt động ngay cả khi bạn đứng sau bộ giảm tải SSL như Pound hoặc BigIP. Những người giảm tải thường sẽ chuyển tất cả lưu lượng truy cập vào cùng một cổng và giải pháp được phê duyệt sẽ không hoạt động trong trường hợp cụ thể đó
Spiritoo

1
@spriteoo Không phải vậy. Các tài liệu Apache nói cụ thể rằng đây là một trong những tình huống mà bạn không nên sử dụng mod_rewrite và nên sử dụng Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga

4
@LukeMadhanga Apache docrecommands sử dụng Redirect để thực hiện. Tuy nhiên, giải pháp RewriteEngine tốt hơn, theo nghĩa chung hơn, bởi vì nó hoạt động ngay cả trong trường hợp tôi mô tả (giảm tải). Mục tiêu của nhận xét của tôi là cung cấp cho mọi người dùng chìa khóa để lựa chọn giữa hai câu trả lời. Một số người muốn các thủ tục chung (quân đoàn lớn), những người khác muốn hiệu suất ... đó là một sự lựa chọn miễn phí.
Spiritoo

19
Điều này thật tuyệt, tuy nhiên, nếu bạn muốn làm cho nó lớn hơn thì hãy thêm [R = 302, L, QSA] để bất kỳ tham số nào cũng được chuyển đến trang bảo mật. Nó sẽ trông giống như:% {REQUEST_URI} [R = 302, L, QSA]
Svetoslav Marinov

Tôi đã sử dụng các dòng này và khi thử tải trang, phản hồi là "Không thể tải tài nguyên: net :: ERR_CONNMENT_REFUSED". Tôi đang làm gì sai?
Serkan

98

Tìm kiếm apache redirect http to https và hạ cánh ở đây. Đây là những gì tôi đã làm trên Ubuntu:

1) Kích hoạt mô-đun

sudo a2enmod rewrite
sudo a2enmod ssl

2) Chỉnh sửa cấu hình trang web của bạn

Chỉnh sửa tập tin

/etc/apache2/sites-available/000-default.conf

Nội dung nên là:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # Rest of your site config
    # ...
</VirtualHost>
  • Lưu ý rằng mô-đun SSL yêu cầu chứng chỉ. bạn sẽ cần chỉ định một cái hiện có (nếu bạn đã mua) hoặc để tự tạo chứng chỉ tự ký .

3) Khởi động lại apache2

sudo service apache2 restart

Làm việc với Ubuntu 16.04 & Apache2. Cảm ơn!
Sylvester Yao

11

Trên thực tế, chủ đề của bạn thuộc về https://serverfault.com/ nhưng bạn vẫn có thể thử kiểm tra các chỉ thị .htaccess này:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1

11

Sử dụng mod_rewrite không phải là cách được đề xuất thay vào đó sử dụng máy chủ ảo và chuyển hướng.

Trong trường hợp, nếu bạn có xu hướng sử dụng mod_rewrite:

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

Tham khảo: Wiki httpd - RewriteHTTPToHTTPS

Nếu bạn đang tìm kiếm Chuyển hướng vĩnh viễn 301, thì cờ chuyển hướng phải là,

 R=301

vì vậy RewriteRule sẽ như thế nào,

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

6

Nếu bạn có Apache2.4 kiểm tra 000-default.conf- xóa DocumentRootvà thêm

Redirect permanent / https://[your-domain]/

5

Phiên bản máy chủ: Apache / 2.4,29 (Ubuntu)

Sau thời gian dài tìm kiếm trên web và trong tài liệu chính thức về apache, giải pháp duy nhất hiệu quả với tôi đến từ /usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

Trong tệp /etc/apache2/sites-av Available / 000-default.conf thêm

Chuyển hướng "/" " https://sub.domain.com/ "

<VirtualHost *:80>

    #ServerName www.example.com
    DocumentRoot /var/www/owncloud
    Redirect "/" "https://sub.domain.com/"

Đó là nó.


PS: Nếu bạn muốn đọc hướng dẫn mà không cần giải nén:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz

3

Điều này làm việc cho tôi:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

3

Mã này làm việc cho tôi.

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]


2

Vui lòng thử cái này trong cấu hình apache Virtualhosting và sau đó tải lại dịch vụ apache

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

-1

Tôi cần điều này cho một cái gì đó đơn giản như chuyển hướng tất cả httplưu lượng truy cập từ trang chủ apache mặc định trên máy chủ của tôi sang một dịch vụ được phục vụhttps .

Vì tôi vẫn còn khá xanh khi định cấu hình apache, tôi thích tránh sử dụng mod_rewritetrực tiếp và thay vào đó là một thứ đơn giản như thế này:

<VirtualHost *:80>
  <Location "/">
     Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
  </Location>
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot "/var/www/html"
  SSLEngine on
  ...
</VirtualHost>

Tôi thích điều này bởi vì nó cho phép tôi sử dụng các biến apache và theo cách đó tôi không phải chỉ định tên máy chủ thực tế vì đó chỉ là một địa chỉ IP không có tên miền liên quan.

Người giới thiệu: https://stackoverflow.com/a/40291044/2089675

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.