PHP 내장형 웹 서버의 리디렉션 향상

이 문제는 REST API 매개변수에서 마침표를 사용하려고 했을 때 발생했습니다.어떤 사람들은 이 점을 의심할 수 있지만, 우리는 이것이 매우 튼튼한 상업적 이유가 있다고 가정하자.
다음은 예시 URL입니다.http://localhost:8009/url.target/www.google.com이 URL은nginx와apache에서 매우 잘 실행됩니다.그러나 내장된 php 서버는 URL에서 점/소수/마침표를 볼 때 이 파일을 찾으려고 시도합니다.따라서 PHP 내장 웹 서버에서 이 URL에 액세스를 시도하면 다음과 같은 결과가 발생합니다.url.target/www.google.com was not found on this server내장 서버의 기본 동작을 변경하는 방법은 사용자 정의 공유기 스크립트를 추가하는 것입니다.인터넷에 올라온 댓글에서 이걸 찾았어요...수차례의 검색을 거치다.
<?php

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

if (file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) {
    return false;
} else {
    $_SERVER['SCRIPT_NAME'] = 'index.php';
    include './public/index.php';
}
한 서버에서 API/를 실행 중입니다.공용 폴더, 인덱스.php, 위 코드에서 보듯이.이 스크립트는 요청한 URL에 실제 파일이 있는지 확인합니다. 존재하지 않으면 기본적으로 공공/index로 바꿉니다.php, 이것이 바로 우리가 원하는 것입니다.
그러나 공유기를 추가하면 php 처리 경로가 바뀌기 때문에 다음 코드가 있습니다.require '../flight/Flight.php';라우터를 더 이상 사용하지 않습니다.php가 작동하고 있습니다.다음과 같이 변경해야 합니다.require __DIR__ . '/../flight/Flight.php';현재 내장된 웹 서버를 실행하고 있습니다. 공유기를 기억하십시오.php 파일은 프로젝트 루트 디렉터리에 있습니다. 루트 디렉터리에서 실행합니다.php -S 0.0.0.0:8009 -t public router.php(나는 0.0.0.0을 더 좋아한다. 이렇게 하면 나는 같은 랜에서 휴대전화를 통해 이 사이트를 방문할 수 있다)
같은 문제에 부딪힐 수 있는 다른 사람들을 도울 수 있기를 바란다.

좋은 웹페이지 즐겨찾기