Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Tôi đã viết một chức năng nhỏ để thiết lập giao thức URL hiện tại nhưng tôi không có SSL và không biết cách kiểm tra xem nó có hoạt động theo HTTPS không. Bạn có thể cho tôi biết nếu điều này là chính xác?Can you tell me if this is correct?

function siteURL()
{
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $domainName = $_SERVER['HTTP_HOST'].'/';
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

Có cần thiết phải làm điều đó như trên hay tôi có thể làm điều đó như thế nào?:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );

Trong SSL, máy chủ không tự động chuyển đổi URL thành HTTPS ngay cả khi URL thẻ neo đang sử dụng HTTP? Có cần thiết để kiểm tra giao thức không?

Cảm ơn bạn!

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Balusc

1.1M365 Huy hiệu vàng3572 Huy hiệu bạc3523 Huy hiệu Đồng365 gold badges3572 silver badges3523 bronze badges

Hỏi ngày 21 tháng 12 năm 2010 lúc 19:30Dec 21, 2010 at 19:30

5

Điều này phù hợp với tôi

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}

Đã trả lời ngày 11 tháng 1 năm 2013 lúc 1:17Jan 11, 2013 at 1:17

Rid iciousrid iciousRid Iculous

3.5762 Huy hiệu vàng21 Huy hiệu bạc28 Huy hiệu đồng2 gold badges21 silver badges28 bronze badges

3

Tôi biết đã muộn, mặc dù có một cách thuận tiện hơn nhiều để giải quyết loại vấn đề này! Các giải pháp khác khá lộn xộn; Đây là cách tôi sẽ làm điều đó:

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';

... hoặc thậm chí không có điều kiện nếu bạn thích:

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';

Có một cái nhìn vào

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
4

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Ashleedawg

Phim thương hiệu vàng 19.4K77 gold badges69 silver badges100 bronze badges

Đã trả lời ngày 26 tháng 2 năm 2013 lúc 23:21Feb 26, 2013 at 23:21

IVOIVOIvo

6.2701 Huy hiệu vàng24 Huy hiệu bạc43 Huy hiệu đồng1 gold badge24 silver badges43 bronze badges

12

Nó không phải là tự động. Chức năng hàng đầu của bạn trông ổn.

Đã trả lời ngày 21 tháng 12 năm 2010 lúc 19:38Dec 21, 2010 at 19:38

Lợi nhuậnprofitphp

7.9482 Huy hiệu vàng26 Huy hiệu bạc21 Huy hiệu đồng2 gold badges26 silver badges21 bronze badges

3

Một vài thay đổi:

function siteURL() {
  $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || 
    $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  $domainName = $_SERVER['HTTP_HOST'];
  return $protocol.$domainName;
}

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Dave Jarvis

299K38 Huy hiệu vàng176 Huy hiệu bạc 306 Huy hiệu đồng38 gold badges176 silver badges306 bronze badges

Đã trả lời ngày 11 tháng 9 năm 2012 lúc 6:42Sep 11, 2012 at 6:42

Anoop Kanoop kAnoop K

2813 Huy hiệu bạc3 Huy hiệu đồng3 silver badges3 bronze badges

Cách ngắn

$scheme = $_SERVER['REQUEST_SCHEME'] . '://';

Đã trả lời ngày 20 tháng 2 năm 2015 lúc 17:37Feb 20, 2015 at 17:37

softcod.comsoftcod.comsoftcod.com

4865 Huy hiệu bạc8 Huy hiệu Đồng5 silver badges8 bronze badges

2

Bởi vì số cổng kiểm tra không phải là một thực hành tốt theo tôi, giải pháp của tôi là:

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
5Constant trả về
if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
6 nếu
if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
7 được đặt và bằng với "1", "true", "trên" hoặc "có". Trả về sai nếu không.

Đã trả lời ngày 1 tháng 10 năm 2014 lúc 15:43Oct 1, 2014 at 15:43

Alexalexalex

5.5416 Huy hiệu vàng32 Huy hiệu bạc54 Huy hiệu đồng6 gold badges32 silver badges54 bronze badges

2

Đối với bất kỳ hệ thống nào ngoại trừ IIS, điều này khá đủ để xác định URL tự trang web:

________số 8

hoặc

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/';

Phụ thuộc vào những gì bạn muốn chính xác: http_host so với server_name

Đã trả lời ngày 15 tháng 9 năm 2016 lúc 18:17Sep 15, 2016 at 18:17

Trong trường hợp proxy,

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
8 có thể không cung cấp đúng giá trị, vì vậy đây là những gì làm việc cho tôi -

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
0

Đã trả lời ngày 26 tháng 8 năm 2016 lúc 7:00Aug 26, 2016 at 7:00

HarshitharshitHarshit

7111 Huy hiệu vàng9 Huy hiệu bạc29 Huy hiệu đồng1 gold badge9 silver badges29 bronze badges

0

Sử dụng biến máy chủ này để có được chi tiết giao thức:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
1

Lưu ý rằng biến máy chủ này là không đáng tin cậy. Để biết thêm thông tin, hãy xem: $ _Server ['request_scheme'] có đáng tin cậy không?

Đã trả lời ngày 8 tháng 7 năm 2015 lúc 9:11Jul 8, 2015 at 9:11

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

shashik493shashik493shashik493

7701 Huy hiệu vàng9 Huy hiệu bạc12 Huy hiệu đồng1 gold badge9 silver badges12 bronze badges

1

Trích xuất từ ​​Codeigniter:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
2

Đã trả lời ngày 3 tháng 7 năm 2018 lúc 9:40Jul 3, 2018 at 9:40

GuillauguillaumeGuillaume

4334 Huy hiệu bạc11 Huy hiệu đồng4 silver badges11 bronze badges

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
3

Đã trả lời ngày 30 tháng 6 năm 2016 lúc 17:39Jun 30, 2016 at 17:39

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Tôi biết đây là một câu hỏi cũ nhưng tôi đã bắt gặp điều này hôm nay vì tôi cần kiểm tra cho điều này trong trang web của mình. Có vẻ như các câu trả lời ở trên là không cần thiết phải phức tạp. Để thiết lập giao thức trang web, tất cả những gì bạn phải làm là kiểm tra

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
7

Nếu giao thức đang sử dụng HTTPS, thì

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
7 sẽ trả về 'BẬT'. Nếu không, biến sẽ vẫn trống. Ví dụ:
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
1

$ Ssl_test = $ _server ['https'];

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
4

Bạn có thể sử dụng ở trên để kiểm tra dễ dàng và sạch sẽ cho HTTPS và thực hiện phù hợp. :)

Đã trả lời ngày 2 tháng 4 năm 2018 lúc 23:21Apr 2, 2018 at 23:21

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Rob Stockirob StockiRob Stocki

Huy hiệu đồng 1461 Bạc9 Huy hiệu Đồng1 silver badge9 bronze badges

1

Tạo một chức năng bằng cách sử dụng câu trả lời của Rid icious hoạt động trên hệ thống của tôi.

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
5

Hy vọng nó giúp

Đã trả lời ngày 10 tháng 5 năm 2014 lúc 6:28May 10, 2014 at 6:28

Miyurumiyurumiyuru

1.09111 Huy hiệu bạc19 Huy hiệu đồng11 silver badges19 bronze badges

Tôi đã thử nghiệm câu trả lời được bình chọn nhiều nhất và nó không hiệu quả với tôi, cuối cùng tôi đã sử dụng:didn't work for me, I ended up using:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
6

Đã trả lời ngày 13 tháng 5 năm 2016 lúc 15:10May 13, 2016 at 15:10

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Pedro lobitopedro lobitoPedro Lobito

88.6K29 Huy hiệu vàng239 Huy hiệu bạc256 Huy hiệu Đồng29 gold badges239 silver badges256 bronze badges

4

Đây là cách tôi làm điều đó ... nó là phiên bản viết tắt

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
2 của câu trả lời của Rid icious ...shorthand
$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';
2 version of Rid Iculous's answer ...

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
7

Đã trả lời ngày 14 tháng 11 năm 2017 lúc 17:54Nov 14, 2017 at 17:54

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Scotty gscotty gScotty G

3682 Huy hiệu bạc6 Huy hiệu Đồng2 silver badges6 bronze badges

Tôi nghĩ rằng func hoàn chỉnh sẽ trông giống như:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
8

Ghi chú:

  • Bạn cũng nên tìm kiếm http_x_foreded_proto (ví dụ: nếu máy chủ proxy)
  • Dựa vào cổng 443 không an toàn (HTTPS có thể được phục vụ trên các cổng khác nhau)
  • Request_scheme không đáng tin cậy

Đã trả lời ngày 19 tháng 2 năm 2020 lúc 14:24Feb 19, 2020 at 14:24

Hướng dẫn how do i get https or http in php? - làm cách nào để lấy https hoặc http trong php?

Koalaokkoalaokkoalaok

4.6909 Huy hiệu vàng41 Huy hiệu bạc81 Huy hiệu đồng9 gold badges41 silver badges81 bronze badges

Đó là giải pháp tốt nhất cho HTTPS hoặc HTTP sử dụng điều này:

function siteURL()
{
    $protocol = 'http://';
    $domainName = $_SERVER['HTTP_HOST'].'/'
    return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
9

Nhưng không thể hiển thị HTTPS hoặc HTTP, vì vậy nó chỉ sử dụng để liên kết nội dung trang web của bạn như hình ảnh, v.v.

Nếu muốn chuyển hướng trang web của bạn trong HTTPS, hãy thêm mã này vào tệp .htaccess:

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
0

Thay đổi www.your-domain.com với tên Dowmain của bạn.www.your-domain.com with your dowmain name.

Đã trả lời ngày 18 tháng 5 năm 2017 lúc 16:15May 18, 2017 at 16:15

Tôi biết tôi hơi muộn với bữa tiệc này, nhưng nếu bạn không thích sử dụng $ _Server vì nó không được khuyến khích mạnh mẽ, và thậm chí bị vô hiệu hóa trên một số khung PHP; Và bạn có một máy chủ web Apache, bạn có thể sử dụng lệnh gốc của nó: -and you have an apache web server, you can use it's native command thusly: -

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
1

Đã trả lời ngày 5 tháng 3 năm 2020 lúc 1:24Mar 5, 2020 at 1:24

JonathanjonathanJonathan

7572 Huy hiệu vàng10 Huy hiệu bạc17 Huy hiệu đồng2 gold badges10 silver badges17 bronze badges

Cũng muộn trong bữa tiệc, nhưng đây là phiên bản ngắn hơn của câu trả lời của Rid Icious bằng cách sử dụng nhà điều hành Null Coalescing:Null Coalescing Operator:

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
2

Or:

if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
3

Đã trả lời ngày 2 tháng 6 lúc 0:41Jun 2 at 0:41

AranxoaranxoAranxo

5622 Huy hiệu bạc14 Huy hiệu Đồng2 silver badges14 bronze badges

Làm cách nào để nhận HTTP hoặc HTTPS trong PHP?

function siteUrl () {$ giao thức = 'http: //';$ domainName = $ _server ['http_host'] ...
Bạn cũng nên tìm kiếm http_x_foreded_proto (ví dụ: nếu máy chủ proxy).
Dựa trên cổng 443 không an toàn (HTTPS có thể được phục vụ trên các cổng khác nhau).
Request_scheme không đáng tin cậy ..

Làm thế nào để tôi biết nếu url của tôi là http hoặc https?

May mắn thay, có hai kiểm tra nhanh để giúp bạn chắc chắn: Nhìn vào Bộ định vị tài nguyên thống nhất (URL) của trang web.Một URL an toàn nên bắt đầu với các https, chứ không phải là http http.Các S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S SA secure URL should begin with “https” rather than “http.” The “s” in “https” stands for secure, which indicates that the site is using a Secure Sockets Layer (SSL) Certificate.

Làm thế nào tôi có thể biết nếu HTTPS được bật trong PHP?

Trong PHP, cách phổ biến nhất để xác định liệu một yêu cầu được thực hiện thông qua giao thức HTTPS hay không có sử dụng thuộc tính HTTPS trên SuperGlobal $ _Server như vậy: $ _Server ['https'];$_SERVER['HTTPS'];

PHP có sử dụng HTTP không?

Các yêu cầu HTTP là một đặc điểm nổi bật của các ứng dụng hiện đại, dựa trên web, đặc biệt là trong PHP..