Napisałem małą funkcję do ustanowienia bieżącego protokołu adresu URL witryny, ale nie mam protokołu SSL i nie wiem, jak sprawdzić, czy działa on pod https. Czy możesz mi powiedzieć, czy to prawda?
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() );
Czy trzeba to zrobić jak wyżej, czy mogę to po prostu zrobić ?:
function siteURL()
{
$protocol = 'http://';
$domainName = $_SERVER['HTTP_HOST'].'/'
return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
W trybie SSL serwer nie konwertuje automatycznie adresu URL na https, nawet jeśli adres URL tagu kotwicy używa http? Czy konieczne jest sprawdzenie protokołu?
Dziękuję Ci!
Odpowiedzi:
To nie jest automatyczne. Twoja najlepsza funkcja wygląda dobrze.
źródło
//mysqite.com
zamiasthttps://mysitecom
Wiem, że jest późno, chociaż istnieje znacznie wygodniejszy sposób rozwiązania tego rodzaju problemu! Inne rozwiązania są dość nieuporządkowane; tak bym to zrobił:
... lub nawet bez warunku, jeśli wolisz:
Spójrz na
$_SERVER["SERVER_PROTOCOL"]
źródło
stripos
zamiaststrpos
?$_SERVER['SERVER_PROTOCOL']
jest przeznaczony do przechowywaniaHTTP/1.0
lub, wHTTP/1.1
zależności od wersji protokołu, o jakiej konfiguracji serwera HTTP mówisz, przechowująchttps
informacje o tym ciągu pochodzącym z zapytania http?To działa dla mnie
źródło
Trochę zmian:
źródło
krótka droga
źródło
REQUEST_SCHEME
nie jest wiarygodnyPonieważ testowanie numeru portu nie jest według mnie dobrą praktyką, moim rozwiązaniem jest:
Te
HTTPS
ciągłe powrotyTRUE
jeśli$_SERVER['HTTPS']
jest ustawiony i jest równy „1”, „prawda”, „on” lub „tak”. W przeciwnym razie zwraca FALSE.źródło
W przypadku dowolnego systemu z wyjątkiem IIS wystarczy to do zdefiniowania własnego adresu URL witryny:
lub
zależy od tego, czego dokładnie chcesz: HTTP_HOST vs. SERVER_NAME
źródło
W przypadku proxy
SERVER_PORT
może nie podać poprawnej wartości, więc to działało dla mnie -źródło
Użyj tej zmiennej serwera, aby uzyskać szczegółowe informacje o protokole:
Zauważ, że ta zmienna serwera jest zawodna. Aby uzyskać więcej informacji, spójrz na: Czy $ _SERVER ['REQUEST_SCHEME'] jest solidny?
źródło
Wiem, że to stare pytanie, ale dzisiaj się z tym spotkałem, ponieważ musiałem je przetestować na mojej stronie. Wydaje się, że powyższe odpowiedzi są niepotrzebnie skomplikowane. Aby ustalić protokół witryny, wystarczy przetestować
$_SERVER['HTTPS']
Jeśli protokół używa HTTPS, wówczas
$_SERVER['HTTPS']
zwróci „on”. Jeśli nie, zmienna pozostanie pusta. Na przykład:// test if HTTPS is being used. If it is, the echo will return '$SSL_test: on'. If not HTTPS, '$SSL_test' will remain empty.
$SSL_test = $_SERVER['HTTPS'];
Możesz użyć powyższego, aby łatwo i czysto przetestować HTTPS i odpowiednio zaimplementować. :)
źródło
wykonał funkcję przy użyciu odpowiedzi Rid Iculous , która działała w moim systemie.
Mam nadzieję, że to pomoże
źródło
Przetestowałem najczęściej głosowaną odpowiedź i nie działało to dla mnie , w końcu użyłem:
źródło
$_SERVER["HTTPS"]
dlatego kod może zwrócić,http://
nawet jeśli powinienhttps://
https
, dlaczego kod nadal miałby zwracaćhttps
?$_SERVER["HTTPS"]
zmienna nigdy nie jest zdefiniowana.źródło
Wyodrębniono z CodeIgniter:
źródło
to najlepsze rozwiązanie https lub http użyj tego:
Ale nie może wyświetlać https ani http, więc służy tylko do łączenia treści witryny, takich jak obraz itp.
jeśli chcesz przekierować swoją stronę w https, dodaj ten kod do pliku .htaccess:
Zmień adres www.twoja-domena.com na swoją nazwę dowmain.
źródło
Oto jak to zrobić ... to jest skróconą
if else
wersją RID Iculous za odpowiedź ...źródło
Myślę, że cała funkcja powinna wyglądać następująco:
Uwagi:
źródło
Wiem, że jestem trochę spóźniony na tę imprezę, ale jeśli wolisz nie używać $ _SERVER, ponieważ jest to zdecydowanie odradzane, a nawet dezaktywowane w niektórych frameworkach PHP; i masz serwer WWW Apache, możesz w ten sposób użyć jego natywnego polecenia: -
źródło