2009-08-25 29 views
23

Tôi có một ứng dụng Zend Framework mà tôi muốn ép buộc vào HTTPS bằng cách sử dụng mod_rewrite. Tôi khá bị mất khi nói đến mod_rewrite. Đây là tệp .htaccess hiện tại của tôi trong thư mục gốc của ứng dụng của tôi.Buộc SSL/HTTPS với mod_rewrite

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php 

Cách tốt nhất để buộc ứng dụng vào HTTPS dựa trên những gì tôi có? Tôi đã thử một vài ví dụ tôi tìm thấy ở đây, nhưng tôi tiếp tục nhận được vòng chuyển hướng hoặc lỗi máy chủ nội bộ khi tôi thử chúng.

Cảm ơn sự giúp đỡ của bạn!

+0

Câu hỏi không liên quan gì đến Zend Framework. Nhiều sai lầm khi bạn tìm kiếm giải pháp zend trên google. Nên đổi tên thành "câu hỏi mod_rewrite khác" – DanFromGermany

Trả lời

2

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301] 
36

Đặt quy tắc này trước khi quy định hiện hành của bạn:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

Điểm cần lưu ý ở đây là "Đặt quy tắc này trước quy tắc hiện tại của bạn". Đặt điều này làm quy tắc đầu tiên. Trang web của tôi đã có một số quy tắc chuyển hướng và làm cho quy tắc này là quy tắc đầu tiên thực hiện thủ thuật. –

5

tôi đang tìm kiếm giải pháp này là tốt. Tôi đã thêm các giải pháp của Gumbo và nó làm việc rất tốt cho tôi. Nhưng bản gốc của tôi thì khác. Trang web/ứng dụng của tôi viết lại chuyển hướng tất cả mọi thứ thông qua index.php (cho fany url và ../application) ngoại trừ các tập tin bạn yêu cầu cụ thể. (giống như một hình ảnh hoặc các tệp tĩnh khác trong thư mục gốc) Đây là bản gốc của tôi, mà tôi đã tìm thấy trên trang web ZF một thời gian dài trước đây.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Dưới đây là các quy tắc bổ sung của Gumbo để buộc SSL trên toàn bộ trang web. Cho đến nay hoạt động tốt cho tôi.

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
24

Trong khi giải pháp Gumbo của hoạt động tốt cho máy chủ web Apache trung bình của bạn, tôi có kinh nghiệm chuyển hướng vòng trên các máy chủ proxy đằng sau (ví dụ trang web CloudFlare'd hoặc OpenShift). Giải pháp sau hoạt động tốt cho cả máy chủ được ủy quyền và không được hỗ trợ:

RewriteEngine On 

# If we receive a forwarded http request from a proxy... 
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] 

# ...or just a plain old http request directly from the client 
RewriteCond %{HTTP:X-Forwarded-Proto} ="" 
RewriteCond %{HTTPS} !=on 

# Redirect to https version 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Put the rest of your rewrite rules here 
+4

Xác định +1 cho câu trả lời này khi sử dụng SSL linh hoạt Cloudflare; tất cả các giải pháp khác dường như tạo ra các vòng chuyển hướng – BellamyStudio

+0

Làm việc trên một trang wordpress nơi chỉ có trang chủ đang buộc https trong khi các trang khác http được cho phép. Lưu ý: Tôi đã phải đặt mã này TRƯỚC KHI '# BEGIN WordPress' trong .htaccess để làm cho nó hoạt động. – nikhilvj

+1

Được sử dụng cho Heroku. Mát mẻ! –