인프런 커뮤니티 질문&답변

SungJong Kim님의 프로필 이미지

작성한 질문수

PHP 7+ 프로그래밍: 객체지향

26 - 라우팅 (Routing; Route, Middleware, RequestContext)

apache에 올릴경우

작성

·

643

1

강의 잘보고 있습니다.

해당 소스로 아파치 서버에 적용할 경우 별도 서버 세팅이 필요한 것 같은데요.

그냥 올렸더니 라우팅이 전혀 동작을 안하네요.

어떤 세팅을 하면 적용할 수 있을까요?

답변 부탁드리겠습니다.

감사합니다.

답변 7

1

정상우님의 프로필 이미지
정상우
지식공유자

찾았습니다. 아파치에서 돌릴 떄 $_SERVER 배열에 PATH_INFO 가 없을 수도 있습니다. 라우팅을 매치 할때 PATH_INFO 를 사용해서 그럴 수도 있습니다. 이를 REQUEST_URI 로 변경하고  해보시기 바랍니다. 이는 Eclair\Http\Reqeust::getPath() 부분입니다. 아파치 설정은 위에 올려드린 그대로 사용해도 괜찮습니다.

public static function getPath()
{
    // return $_SERVER['PATH_INFO'] ?? '/';
    return explode('?', $_SERVER['REQUEST_URI'])[0];
}

저는 질문 작성자님과 같이 무한 루프 현상은 없었지만 URL PATH에 따른 화면 처리를 잘 못하였습니다.

해당 질문에 대한 강사님의 답변을 통해 해결하게 되었고, 제공해주신 소스코드를 좀 더 변경해 보았습니다. 아래를 참고하시면 될 것 같습니다.

정상우님의 프로필 이미지
정상우
지식공유자

@Henu 역시! 적절한 변경입니다. 이렇게 처리하면 아파치에서도, 내장서버에서도 문제가 발생하지 않겠군요 👍

1

정상우님의 프로필 이미지
정상우
지식공유자

웹 서버에서 라우팅을 동작시킬 때는,
모든 라우트에 대해서 하나의 리퀘스트 경로로 인식하도록 설정해줄 필요가 있을 것입니다.

아래의 코드는 라라벨 프로젝트에 있는 웹서버 설정, .htaccess 파일을 가져온 것입니다.
모든 요청이 index.php(/) 로 인식해야 라우트가 동작할 것입니다.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

0

정상우님의 프로필 이미지
정상우
지식공유자

감사합니다. 수강평도 꼭 달아주세요!
해당 질문은 강의 소개 - 참고 할만한 질의 응답에 올리겠습니다.

0

SungJong Kim님의 프로필 이미지
SungJong Kim
질문자

와 진짜 감사합니다.  보내주신데로 하니까 해결됐습니다.

저같은 사람 계속 생길 것 같은데 공지로 올려주시면 아주 좋을 것 같아요~ 앞으로도 좋은 강의 부탁드리겠습니다. =)

0

SungJong Kim님의 프로필 이미지
SungJong Kim
질문자

아니요 내장서버에서는 전부 잘 동작하고 있습니다.

0

정상우님의 프로필 이미지
정상우
지식공유자

PHP 내장 웹서버를 동작할 때도 무한 루프에 빠지시나요?
일단, 핵심은 모든 리퀘스트 요청에 대해 루트 경로로 이동시켜야 한다는 점인데 .. 흠

0

SungJong Kim님의 프로필 이미지
SungJong Kim
질문자

빠른 답변 감사드립니다.

그런데 보내주신 내용으로 이미 적용해봣었는데 이동 무한루프에 빠지고 있습니다.