질문을 삭제하지 말아주세요.!
 
1
0
-1

안녕하세요. 이제 라라벨의 매력에 빠져들고 있는


사용자인데 기본적인 부분 같은 곳에서 막혔네요...ㅜ

web.php 파일 안에

Route::get('/',function () {
return 'Hello'
});

위와 같이 실행하고 localhost:8080으로 실행하면 Hello가 나옵니다.


Route::get('home',function () {
return 'home!';
});

이렇게 입력하고 localhost:8080/home을 입력하면

Not Found

The requested URL /home was not found on this server.

이러한 에러가 뜨는데 왜그런거죠??


간단한 문제인거 같은데 모르겠네요...

    CommentAdd your comment...

    1 answer

    1.  
      2
      1
      0

      웹서버 설정이 잘못된 것 같습니다.

      apache (httpd)라면 DocumentRoot 설정,

      Nginx 라면 root 가 


      라라벨이 설치된 디렉토리의 public/index.php 로 제대로 설정되어 있는지 확인하시면 될것 같습니다.

      참고로 storage/log/laravel.log 파일을 확인하시면 보다 자세한 에러 메세지가 있으니. 이부분을 참고하시고

      그래도 계속 안된다면, 에러 메세지와 함께 다시 질문해 주세요.


      https://laravel.kr/docs/5.3/installation 에서 

      Public 디렉토리

      부분을 확인해주세요

      1. 최재호

        제가 이해하기로는 Public 폴더 안의 파일을 찾기전에 

        web.php 파일안의 라우트 부분을 참고하여

        home! 을 리턴한다고 생각했는데 이것이 아닌가요??

        Public 폴더 안의 파일은 return 에서 정해주고요~

        HTTP 호출 → web.php 파일안의 라우트 부분 참고 return 값에 따라서 → Public 폴더 안의 파일 검색

      2. 최재호

        그리구 아파치 설정값은

        <VirtualHost *:8080>
        DocumentRoot "/home/mysql/laravel/public"
        <Directory "/home/mysql/laravel/public">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
        </Directory>
        ServerName local.blog.com
        ErrorLog "/usr/local/apache2/logs/blog.com-error_log"
        CustomLog "/usr/local/apache2/logs/blog.com-access_log" common
        </VirtualHost>


        이렇게 laravel 설치폴더/public으로 설정 되있었고 Not Found에서는

        로그가 따로 생기지 않네요...ㅜㅜ 

      3. 안정수

        최재호

        public 폴더 내에 .htaccess 파일이 존재합니다. 

        아파치 설정에서 .htaccess 가 허용되어 있어야 합니다. 

        AllowOverride all 로 변경해보시고 웹서버를 재시작해보세요.
      4. 안정수

        최재호


        부연설명을 더 하자면

        웹서버 설정이 정상적으로 되어 있다면

        1. 모든 Request (웹서버 설정에 따라 .htaccess 파일에 정의된 대로) => public/index.php
        2. public/index.php
        - 부트스트래핑(라라벨 내부 부팅:세션..디비..로깅..등등등 로딩)
        - 라우팅 분석
        3. 라우트 파일에 등록된 라우팅에 따라 결과 반환

        입니다.

        그런데 설명하신 것처럼 웹서버 설정이 되어 있다면 (apache 의 경우 DocumentRoot 와 AllowOverride)

        localhost:8080/ => public/index.php => 정상 반환

        localhost:8080/home => public/home/index.php => 파일 못찾음 에러.. 아파치 에러 남기고, laravel.log 남기지 않음(라라벨 로직을 거치지 않으므로..)

        입니다.

        따라서, 제가 생각하기로는 웹서버 설정이 잘못되어 있다고 추정하는 것이구요, 위의 경우에는 모든 Request를 public/index.php 로 가게끔 하는 .htaccess 설정이 적용되지 않는 문제같습니다.


        아래는 참고사항입니다.

        이렇게 모든 Http Request-요청을 public/index.php 파일로 받아서 처리하는 방식을 프론트 컨트롤링이라고 하고 다음과 같은 이유때문에 이렇게 합니다.

        - 부트스트래핑(웹 어플리케이션 부팅) 과정을 거침으로써, 공통적인 로직을 모두 제어한다
        - 모든 요청이 하나의 경로를 거치기 때문에, 전체 인증, 보안등의 추가적인 조치가 필요할 때 구현이 용이하다.
        - 파일의 위치에 구애받지 않고, 자유롭게 시스템을 구성할 수 있다.
        - 웹서버에 노출되는 파일은 index.php 하나뿐이므로, 보다 안전하다.

        예전 php 에서는 이런 방식으로 구성하지 않고(프론트 컨트롤링 + php 어플리케이션의 라우팅 로직)

        아파치에 의해서 컨트롤링이 되다보니, 매번 디렉토리를 만들어서 index.php 파일을 넣어야 하는 불편함이 있었습니다.


      5. 최재호

        감사합니다!!

        AllowOverride all 로 바꾸니까 잘 되네요ㅎㅎ

        상세한 설명도 감사합니다!!

      CommentAdd your comment...