http เพื่อเปลี่ยนเส้นทาง apache https


157

Centos สภาพแวดล้อมด้วย apache

กำลังพยายามตั้งค่าการเปลี่ยนเส้นทางอัตโนมัติจาก http เป็น https

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

ฉันได้ลองเพิ่มสิ่งต่อไปนี้ใน httpd.conf แล้ว แต่มันไม่ทำงาน

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

ความคิดใด ๆ

คำตอบ:


210

ฉันทำตามตัวอย่างนี้จริง ๆ แล้วมันได้ผลกับฉัน :)

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>

จากนั้นทำ:

/etc/init.d/httpd restart


7
โปรดทราบว่านี่จะใช้ได้เฉพาะเมื่อคุณมีสิทธิ์เข้าถึงไฟล์ VirtualHost เป็นวิธีที่แนะนำ
foochow

4
หลังจากเปลี่ยนค่านี้ใน httpd.conf ให้รีสตาร์ท apache เว็บเซิร์ฟเวอร์ เพื่อให้มันสะท้อนและล้างแคชเบราว์เซอร์ของคุณด้วย
Suriyan Suresh

2
ฉันต้องการรายงานว่าวิธีนี้ไม่ได้ผลสำหรับฉันกับ Ubuntu 12.4 แต่คำตอบ RewriteEngine ที่นำเสนอนั้นไม่สามารถทำได้
Deano

2
คุณต้องรีสตาร์ทหรือไม่? การรีโหลดน้อยกว่าการทำลายล้างและจะนำไฟล์ config ใหม่มาใช้ /etc/init.d/httpd reload|| service httpd reload
Rebecca Dessonville

3
ตั้งแต่จุดประสงค์ที่จะเปลี่ยนเส้นทางไปยังโหมด SSL ที่บรรทัดDocumentRoot /usr/local/apache2/htdocsคือไม่จำเป็น
อาเบล Callejo

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

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

หรือ

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


3
นี่เป็นวิธีที่ดีกว่าโซลูชันที่ได้รับอนุมัติเนื่องจากสามารถใช้งานได้แม้ว่าคุณจะอยู่เบื้องหลัง SSL offloader เช่น Pound หรือ BigIP Offloader เหล่านั้นมักจะผ่านการรับส่งข้อมูลทั้งหมดไปยังพอร์ตเดียวกันและโซลูชันที่ได้รับการอนุมัติจะไม่ทำงานในกรณีเฉพาะนั้น
spiritoo

1
@spiritoo ไม่เช่นนั้น เอกสาร Apache บอกว่านี่เป็นหนึ่งในสถานการณ์ที่คุณไม่ควรใช้ mod_rewrite และควรใช้ Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html
Luke Madhanga

4
@LukeMadhanga Apache docrecommands โดยใช้ Redirect เพื่อประสิทธิภาพ แต่ยังคงแก้ปัญหา RewriteEngine ดีกว่าในแง่สามัญมากขึ้นเพราะมันทำงานได้แม้ในกรณีที่ฉันอธิบาย (ถ่าย) เป้าหมายของความคิดเห็นของฉันคือการให้กุญแจแก่ผู้ใช้ทุกคนในการเลือกระหว่างสองคำตอบ บางคนต้องการขั้นตอนทั่วไป (คณะใหญ่) บางคนต้องการประสิทธิภาพ ... เป็นตัวเลือกฟรี
spiritoo

20
สิ่งนี้ยอดเยี่ยม แต่ถ้าคุณต้องการทำให้ดีขึ้นให้เพิ่ม [R = 302, L, QSA] เพื่อให้พารามิเตอร์ใด ๆ ถูกส่งผ่านไปยังหน้าความปลอดภัย มันควรจะมีลักษณะ:% {REQUEST_URI} [R = 302, L, QSA]
Svetoslav Marinov

ฉันใช้บรรทัดเหล่านี้และเมื่อพยายามโหลดหน้าการตอบสนองคือ "ไม่สามารถโหลดทรัพยากร: net :: ERR_CONNECTION_REFUSED" ผมทำอะไรผิดหรือเปล่า?
Serkan

98

ค้นหาapache redirect http to httpsและลงจอดที่นี่ นี่คือสิ่งที่ฉันทำบน Ubuntu:

1) เปิดใช้งานโมดูล

sudo a2enmod rewrite
sudo a2enmod ssl

2) แก้ไขการกำหนดค่าเว็บไซต์ของคุณ

แก้ไขไฟล์

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

เนื้อหาควรเป็น:

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

3) รีสตาร์ท apache2

sudo service apache2 restart

ทำงานกับ Ubuntu 16.04 และ Apache2 ขอบคุณ!
ซิลเวสเตอร์เหยา

11

ที่จริงแล้วหัวข้อของคุณอยู่ในhttps://serverfault.com/แต่คุณยังสามารถลองตรวจสอบคำสั่ง. htaccessเหล่านี้:

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

11

การใช้ mod_rewrite ไม่ใช่วิธีที่แนะนำแทนที่จะใช้โฮสต์เสมือนและเปลี่ยนเส้นทาง

ในกรณีที่คุณมีแนวโน้มที่จะใช้ 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

การอ้างอิง: Httpd Wiki - RewriteHTTPToHTTPS

หากคุณกำลังมองหาการเปลี่ยนเส้นทางถาวร 301 การตั้งค่าสถานะการเปลี่ยนเส้นทางควรเป็นดังนี้

 R=301

ดังนั้น RewriteRule จะเป็นเช่นนั้น

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


5

รุ่นเซิร์ฟเวอร์: Apache / 2.4.29 (Ubuntu)

หลังจากค้นหาบนเว็บเป็นเวลานานและในเอกสารอย่างเป็นทางการของ apache โซลูชันเดียวที่ใช้ได้ผลสำหรับฉันมาจาก/usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

ในไฟล์ /etc/apache2/sites-available/000-default.conf ให้เพิ่ม

เปลี่ยนเส้นทาง "/" " https://sub.domain.com/ "

<VirtualHost *:80>

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

แค่นั้นแหละ.


PS: ถ้าคุณต้องการอ่านคู่มือโดยไม่แตกไฟล์:

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


3

รหัสนี้ใช้ได้สำหรับฉัน

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

โปรดลองอันนี้ในการกำหนดค่า apache Virtualhosting แล้วโหลดบริการ apache อีกครั้ง

RewriteEngine On

RewriteCond %{HTTPS} off


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

-1

ฉันต้องการสิ่งนี้เพื่อสิ่งที่ง่ายเหมือนการเปลี่ยนเส้นทางhttpการรับส่งข้อมูลทั้งหมดจากโฮมเพจเริ่มต้นของ apache บนเซิร์ฟเวอร์ของฉันไปยังเซิร์ฟเวอร์ที่ให้บริการhttpsเริ่มต้นบนเซิร์ฟเวอร์ของฉันให้เป็นหนึ่งทำหน้าที่มากกว่า

เนื่องจากฉันยังค่อนข้างเป็นสีเขียวเมื่อพูดถึงการกำหนดค่า apache ฉันชอบที่จะหลีกเลี่ยงการใช้mod_rewriteโดยตรงและแทนที่จะทำสิ่งที่ง่ายกว่านี้แทน:

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

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

ฉันชอบสิ่งนี้เพราะมันทำให้ฉันสามารถใช้ตัวแปร apache และวิธีที่ฉันไม่ต้องระบุชื่อโฮสต์จริงเพราะมันเป็นเพียงที่อยู่ IP ที่ไม่มีชื่อโดเมนที่เกี่ยวข้อง

ข้อมูลอ้างอิง: https://stackoverflow.com/a/40291044/2089675

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.