해결된 질문
작성
·
669
0
강의중에 /auth/login 을 라우트에 설정했음에도 지금 /auth/login을 찾을 수 없다고 나오는데 어떡하죠??
ㅠㅠ 그리고 참고로 hit 함수에서 저 동그란 부분을 '/auth/login 으로 설정해주면
uri가 / 임에도 로그인 페이지가 나타나는데,
이럴땐 어떻게 대쳐하면 되나요.. 하루종일 고민중에 질문합니다... ㅠㅠ
답변 14
1
다행입니다. 아무래도 routes 를 객체지향이 아닌, routes 함수에서 foreach 를 돌면서 hit 함수를 여러번 호출하게 되고 등록된 routes 들을 모두 검증해야 하니 여러 번 찍힐 수가 있습니다. :)
0
0
explode 함수를 사용하여 ? 문자로 분리를 하였기 첫 번째 인덱스에는 path 를 반환합니다. 쿼리 스트링은 두 번째 인덱스에 담겨 있을거에요. 때문에 path 만 있더라도 통과가 가능합니다~
0
hit 함수에서 SERVER['REQUEST_URI'] 이렇게 받은 부분은
참고 처럼 된 처리는 path만 비교해서 쿼리까지도 통과 되나요?
$[requestPath ] = explode('?', $_SERVER['REQUEST_URI'] - 참고-
0
와.. 완벽해졌습니다!!
쿼리도 필요한곳에 들어가게 되네요. web.php 설정없이도... 어떻게 이렇게 되지ㅠㅠ 진짜 감사합니다.
그리고 지금 hit 함수에 $_SERVER['REQUEST_METHOD'] var_dump로 약간의 디버깅? 을 했는데 원래
이렇게 많이 나오는게 정상인가요? 제생각엔 주소만 한번 요청하면 한번 나오는게 맞지 않나요? ㅠㅠ
0
$_SERVER['REQUEST_URI'] 사용시 아래와 같은 느낌으로 처리해보세요. 테스팅 부분은 참고용이고, hit 함수에서 $_SERVER['REQUEST_URI'] 를 explode 로 처리 한 것에 주목하시면 됩니다.
function hit($path, $method = null)
{
[ $requestPath ] = explode('?', $_SERVER['REQUEST_URI']);
$is = $requestPath == $path;
if ($method) {
$is = $is && strtoupper($method) == $_SERVER['REQUEST_METHOD'];
}
return $is;
}
/**
* Testing
*/
// Fake
$_SERVER['REQUEST_URI'] = '/post/delete?id=1';
$_SERVER['REQUEST_METHOD'] = 'GET';
assert(hit('/post/delete', 'get')); // -> passed
0
자세히는 모르겠는데, 지금 라우팅 설정 후에 SERVER['PATH_INFO']는 주소는 표시 되는데요.
페이지 변화가 없어서, SERVER['REQUEST_URI ']로 쓰고 있는데 페이지 변화가 있습니다.
참고로 대신에 쿼리까지 모든 라우팅 주소(web.php)설정은 따로 해야하는 번거로움이 생겼네요. ㅠㅠ
0
테스트를 해보실 필요가 있습니다. 아래에서 보면 REQUEST_URI 는 Get 파라매터까지 포함하므로 매핑이 제대로 이루어지지 않을 수도 있습니다. 물론 이는 hit 함수에서 explode 함수 등을 사용하여 별도로 처리해줄 수 있겠지만, PATH_INFO 가 원하는 정보를 담고있기에 본 프로젝트에서는 이를 사용했습니다. 만약에 Post 부분을 하다가 문제가 생긴다면, 이 부분도 테스트 해보시길 바랍니다.
0
서버 해결 했습니다.. 아이디어 주셔서 감사합니다 .
route 함수가 계속 index 화면만 보여주어서,
hit 함수에서 SERVER['PATH_INFO'] -> SERVER['REQUEST_URI '] 하니깐 되네요!! 감사합니다. ^^
0
보기엔 별 이상 없어보이는데, 웹 서버 쪽의 설정을 건드려보는 것이 좋을 듯합니다.
라라벨의 공식 프로젝트 템플릿인 https://github.com/laravel/laravel
에서 public/.htaccess 에 가면 아래와 같은 코드가 있을텐데 한 번 적용시켜보는 것도 방법입니다.
<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
아!!! 네!! 지금 아파치2 서버를 쓰고 있습니다. 그리고 mods 시큐리티도 쓰고 있어요!
찾아봤는데 일단 그 dir.conf 파일을 조작 해야하는거 같은데...
그러면 지금 이라우터 함수를 쓰기 위해서는 index.php 설정은 어떻게 해야할까요?? ㅠㅠ
web.php 입니다.
routes 함수 입니다.
0
혹시 웹 서버는 개발 서버가 아니라 Apache 를 쓰고 계신다거나 다른 서버를 사용하고 계실까요? 만약 개발 서버가 아니라면, Apache 나 Nginx 라면 모든 요청을 index.php 로 보내야하는 설정이 필요할 수도 있습니다. 그 외의 라우트의 경우, routes 함수에서 모든 것을 관장하기 때문에 보통 문제가 발생한다면 그 함수에서 발생하곤 하는데 .. routes 함수가 어떻게 작성되어 있는 지, web.php 에는 어떤 식으로 매핑되어 있는 지도 볼 필요가 있을 것 같아요.
0
다른것까지 문제가 있습니다 ㅠㅠ 일단 web.php /auth/login 으로도 줬는데 인식이 안되네요.
저 hit함수는 정말 연관이 없다고 생각을 하는데... 저기 조건 삼항식 false 일때,
조건을 /auth/login 바꾸면 'http://localhost:8080/' path로 로그인창이뜨네요.
0
안녕하세요.
?! $_SERVER['PATH_INFO'] 는 홈(http://localhost:8080) 에서는, 그러니까 패치가 / 일 경우에는 값이 비어있을 것이라서 비어 있을 경우 '/' 를 주도록 처리되어 있습니다. 저것이 문제라면 다른 라우트는 잘 동작하나요? 아니면 다른 것까지 문제가 발생한 건가요?