내 경로가 404를 반환합니다. 어떻게 해결할 수 있습니까?


82

방금 라 라벨 프레임 워크를 배우기 시작했는데 라우팅에 문제가 있습니다.

작동하는 유일한 경로는 기본적으로 Laravel에 연결된 기본 홈 경로입니다.

Windows에서 WAMP를 사용하고 있으며 PHP 5.4.3 및 Apache 2.2.22를 사용하고 있으며 mod_rewrite도 활성화하고 application.php 구성 파일에서 'index.php'를 제거하여 빈 문자열을 남겨 둡니다.

User 라는 새 컨트롤러를 만들었습니다 .

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

몇 가지 기본 HTML 코드를 사용하여 application / views / user /에 index.php 라는 뷰 파일을 만들었 으며 route.php에 다음을 추가했습니다.

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});

http://localhost/mysite/public웹 브라우저에서 루트 ( )를 방문하면 첫 번째 경로가 제대로 작동하지만 두 번째 경로로 이동하려고 http://localhost/mysite/public/user하면 404 찾을 수 없음 오류가 발생합니다. 왜 이런 일이 일어날까요?


.htaccess는 상자에서 나온 것처럼 수정되지 않습니다.
JasonMortonNZ

WAMP가 문제인 것 같습니다. 지금 XAMPP로 변경했으며 모든 것이 정상적으로 작동합니다. WAMP가 문제라고 설명하면서이 질문에 스스로 대답해야합니까?
JasonMortonNZ

@AquilaSolutions 예, 가능합니다. 이제 모든 사람이 귀하의 문제가 해결되었음을 분명히 알 수 있습니다.
Jocelyn 2012 년

답변:


25

대신 경로 파일에 이것을 추가해 보셨습니까 Route::get('user', "user@index")?

전과 텍스트의 단편은 @, user이 경우, 사용자 제어 및 후 텍스트의 부분 페이지를 지시한다 @, index상기 스크립트에 지시한다 user기능 public function get_index().

을 (를) 사용 $restful하고있는 것을 확인 Route했습니다 Route::any('user', 'user@index'). 이 경우을로 설정할 수 있습니다 . 이것은 둘 다 따로 작성하는 대신 POST및 둘 다 처리합니다 GET.


문제가 남아 있기 때문에 WAMP에서 XAMPP로 변경합니다. XAMPP 서버에서 새 프로젝트를 시작하고 '.'대신 '@'기호를 사용한 후 이제 잘 작동합니다.
JasonMortonNZ

1
WAMP에서 잘 작동하므로 rewrite_module을 활성화하기 만하면됩니다. 아래 @Muvera의 의견을 참조하십시오.
ajon

3
나는 이것이 오래된 대답이라는 것을 알고 있지만 비슷한 문제가있었습니다. 새 경로가 추가되었지만 작동하지 않았습니다! (404). 캐시 된 경로 만 삭제하면됩니다! PHP 장인 경로 사용 : clear
trainoasis

119

Ubuntu LAMP 설치에서 다음 두 가지 변경 사항으로이 문제를 해결했습니다.

  1. 아파치 서버에서 mod_rewrite를 활성화합니다 : sudo a2enmod rewrite.
  2. /etc/apache2/apache2.conf를 편집 하여 / var / www 디렉토리 (내 기본 문서 루트)에 대한 "AllowOverride"지시문을 변경합니다.AllowOverride All

그런 다음 Apache 서버를 다시 시작합니다. service apache2 restart


이것은 puphpet에서 다운로드 한 방랑자 컴퓨터 에서이 문제를 해결했습니다.
winkbrace

5
감사합니다. 당신은 생명의 은인입니다.
Hassan Murtaza 2015 년

3
고마워, 나는이를 찾을 수 내 4 시간 낭비
Anshul 슈라에게

Laravel-5.4와 맥 OS 높은 시에라 10.13.3에 나를 위해 일한
예브게니 Afanasyev

2
@McSonk, 아마도 질문은 Windows에 대한 것입니다. 이 대체 솔루션은 Ubuntu에서 작동합니다. 고마워.
Fendi Septiawan

63

WAMP를 사용하여 wamp 아이콘-> apache-> apache 모듈-> 스크롤 및 rewrite_module 확인 LoadModule 다시 시작 rewrite_module

"rewrite_module"을 활성화하면 서버 응용 프로그램이 자동으로 다시 시작됩니다.


감사합니다. 어제
Moe

2
이것은 컴퓨터에 WAMP와 Laravel을 설치 / 재설치 할 때마다 발생하는 것 같습니다. 이것은 항상 문제입니다. 바라건대는 마지막으로 메모리에 최선을 다하고됩니다)
켄 모어

Ubuntu 14.04에서 'sudo a2enmod rewrite'와 'sudo service apache2 restart'가 작동했습니다.
nspo 2014 년

리눅스 시스템의 경우 sudo a2enmod rewrite재시작 후 모듈 재 작성 활성화sudo service apache2 restart
aimme

35

다음 사항을 확인하려고 했습니까?

http://localhost/mysite/public/index.php/user 

일하고 있었습니까? 그렇다면 모든 경로의 폴더에 대문자가 없는지 확인하십시오. 나는 같은 상황이었고 문자를 소문자로 변환하는 것이 도움이되었습니다.


감사. 저는 Laravel 책 (Laravel Starter)을 단계별로 살펴보고 있으며 클로저 (13 페이지)로 라우팅하는 데 어려움을 겪었습니다. 이것은 나를 위해 그 문제를 해결했습니다.
Steve Lindsey 2013

이것은 내 문제를 해결했습니다. laravel의 htaccess를 위반 한 아파치 폴더의 루트에 .htaccess가 있습니다.
Maarten00

이것은 내가 가진 다른 문제를 해결했습니다. Laravel을 사용하여 페이지를 생성하고 Angular를 사용하여 REST를 호출하고 Windows에서는 호출이 api/branches작동했지만 Linux에서는이 URL을 다음과 같이 변경 index.php/api/branches해야했습니다. 동일한 URL을 가지도록 이 URL 을 해결하는 방법
miroslavign 2015 년

나는 그것의 대소 문자를 구분 결코 생각하지 않았다
ClearBoth

대신 프로젝트의 루트에 공공 / 폴더에서 htaccess로 파일을 배치, 당신은에 의해 액세스 할 수 있습니다http://localhost/mysite/user
로한 Khude

9

EasyPHP를 사용하여 동일한 문제가 발생했습니다. AllowOverride All에서 내 <Directory>블록에 지정해야 함을 발견 했습니다 httpd.conf. 이것이 없으면 Apache는 때때로 .htaccess.

내 것이 이렇게 생겼어 ...

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>

나는 데비안 GNU / 리눅스 7.6에서이 응답이 apache2 (a2enmod rewrite) 모듈을 활성화하는 것 외에도 필요한 것의 일부를 제공한다는 것을 발견했습니다.
Kevin Buchs 2014 년

6

이동 root/public/.htaccess을 시도 할 수 root/.htaccess있으며 작동합니다.


4
8 개의 질문에 똑같은 답변을 게시했습니다. 중복 된 항목이라고 생각되면 해당 항목을 표시하고 각각에 대한 답변을 게시하지 않아야합니다.
Jaap

5

노선

컨트롤러에서 관리하지 않는 특정 경로를 정의하는 데 사용합니다.

컨트롤러

전통적인 MVC 아키텍처를 사용하고 싶을 때 사용하십시오.

문제에 대한 해결책

컨트롤러 작업에 대해 특정 '명명 된'경로를 원하지 않는 한 컨트롤러를 경로로 등록하지 않습니다.

컨트롤러 작업에 대한 경로를 생성하는 대신 컨트롤러를 등록하기 만하면됩니다.

Route::controller('user');

이제 컨트롤러가 등록되어, 당신은 탐색 할 수 있습니다 http://localhost/mysite/public/user당신이 get_index실행됩니다.

한 번에 모든 컨트롤러를 등록 할 수도 있습니다.

Route::controller(Controller::detect());

3

에서 " RewriteBase"를 잊지 마세요 public/.htaccess.

예 :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public

이 파일을 어디에 넣습니까?
Goddard

3

좋아, 그래서 하루 조금 ​​넘게이 문제에 대해 머리를 두드린 후에 ... 나는 일어나서 어제해야 할 일을했고, 무슨 일이 벌어 졌는지 디버깅했습니다!

Laravel이 여기서 시도 index.php하는 것은 Route로 지정된 경로 바로 앞에 파일을 삽입하는 것 입니다. 예를 들어, 브라우저 Route::get('/account/create', ...,에서 say 를 지정하고 앱 localhost/laravel/authenticate/public/account/create을 실행 localhost/authenticate/public/index.php/account/create하면 laravel은을 (를) 실행하려고 하지만이를 수행합니다. Apache는 해당 요청을 확인해야 /wamp/www/laravel/laravel/authentication/public합니다. laravel 앱이 실제로 설치되어 있지만 후행 public은 대체가 발생해야하는 곳입니다) 'RewriteRule'이 적용되어야합니다.

고맙게도 laravel .htaccess은 앱 public폴더 의 편리한 파일 에 올바른 재 작성 규칙을 제공 합니다. 문제는 '.htaccess'파일의 코드가 WAMP가 즉시 구성되는 방식으로 작동하지 않는다는 것입니다. 이 SEEMS가이 스레드의 맨 위에있는 muvera가 제안한 문제인 이유는 rewrite_module 코드가 아파치에 의해로드되어야 RewriteRule작동 할 것입니다. 도대체 말이 되네요.

말이 안되는 부분 : 간단 stopping하고 restartingApache 서비스는 WAMP가 RewriteRule로 올바른 작업을 수행하는 데 필요한 변경 사항을 선택하지 않습니다. 저는 이것을 여러 번 시도했습니다!

작동하는 것 : 올바른 모듈을로드하기 위해 muvera가 제안한 변경 사항을 적용하십시오 (스레드 상단 참조). 그런 다음 전체 Windows 세션을 재설정하여 Apache를 메모리에서 모두 덤프합니다. WAMP를 다시 시작 (다시로드)하고 VOILA! 수정이 작동하면 올바른 RewriteRule이 적용됩니다. yada, yada; 나는 그 후로 행복하게 살고 있습니다.

좀 더에 대해 많이 알고 좋은의 모든 아웃 소식 .htaccess, RewriteRule그리고 httpd.conf지금 파일입니다. 앱 public .htaccess파일 에서 로직을 이동하고 Directory ...Apache 'bin'폴더 BTW (특히 해당 폴더에 대한 액세스 권한이있는 경우)의 httpd.conf 섹션에 넣는 좋은 (성능) 인수 가 있습니다.


0

php.ini에서 짧은 PHP 태그를 활성화하십시오. WAMP는 보통 그것들을 꺼놓고 laravel은 그것들을 켜야합니다.


무엇을 기다립니다? Laravel에 짧은 태그가 필요합니까?
감독

0
Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

위에서 변경

Route::get('user', function()
{
return View::make('user.index');
});

Route::get('/', function()
{
return View::make('home.index');
});

경로 끝에 '/'(집 / 기본값)을 사용해야합니다.


0

Laravel 5 명령을 사용해야합니다.

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

그리고 route.php에서

  Route::get('/', function()
  {
  return view('home.index');
  });

  Route::get('user', function()
  {
  return view('user.index');
  });

보기 및 컨트롤러에 대한 Laravel 5 명령 변경 사항은 이전에 동일한 오류가 발생했던 문서를 참조하십시오.



0

laravel 공용 폴더 내에서 기본 .htaccess 파일을 삭제했다고 생각합니다. 파일을 업로드하면 문제가 해결됩니다.



0

Homestead를 통해 Vagrant를 사용하는 경우 공유 폴더를 마운트하는 데 오류가있을 수 있습니다. Vagrant는 해당 폴더에서 파일을 가져와 부팅시 호스트 머신에 실제로있는 파일을 교체하는 것처럼 보입니다. 따라서 오류가 발생한 경우 기본적으로 처음 설치했을 때부터 Laravel 설치에 액세스하려고합니다. 설치 중에 생성 된 "홈"만 표시되는 이유입니다.)

VM에 sshing하고 실제로 파일인지 확인하기 위해 routes / web.php 파일을 확인하여 쉽게 확인할 수 있습니다. 그렇지 않은 경우,을 종료하고 vagrant halt, vagrant up및 부팅 오류를 찾습니다.


0
  1. .env 파일 설정
  2. 구성 index.html
  3. 당신이 가지고 있는지 확인하십시오 .htaccess
  4. sudo service apache2 restart

아마도 캐시 문제 때문일 것입니다.


0

경로가 작동하지 않는 주된 문제는 macos에 mod_rewrite.so 모듈이 있고 아파치 구성의 httpd.conf 파일에서 linux가 활성화되지 않았으므로 .htaccess가 작동 할 수 있다는 것입니다. 나는 줄의 주석 처리를 제거하여 이것을 해결했습니다.

# LoadModule rewrite_module libexec/apache2/mod_rewrite.so

#위 줄에서 제거하십시오 httpdf.conf. 그러면 작동합니다.
즐겨!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.