Programing

Laravel 4 홈을 제외한 모든 경로에서 404 오류 발생

crosscheck 2020. 12. 6. 21:12
반응형

Laravel 4 홈을 제외한 모든 경로에서 404 오류 발생


Composer를 사용하여 Laravel 4를 설치하고 가상 호스트도 설정했습니다. 현재 루트 경로 만 작동합니다.

<?php

Route::get('/', function()
{
    return View::make('hello');
});

이것은 아니다:

Route::get('/hello', function()
{
    return View::make('hello');
});

내가 히트 노력하고있어입니다 TasksController에서 /tasks:

Route::resource('tasks', 'TasksController');

이것은 나에게 404 오류도 제공합니다. 내가 뭘 잘못하고 있니? 내 프로젝트의 루트에 기본 .htaccess 파일이 있습니다.

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Mac에서 localhost를 사용하고 있습니다.


웃음을 위해 /index.php/hello작동하는지 확인하십시오 .

그렇다면 .htaccess문제 일 가능성이 큽니다 .


WAMP (Windows 8)에서 Laravel 4를 실행하는 것과 동일한 문제가 발생했습니다.
나를 위해 일한 솔루션은 다음과 같습니다.

  1. apache httpd.conf를 열고 다음 줄을 찾으십시오.

    #LoadModule rewrite_module modules/mod_rewrite.so
    
  2. 이 줄의 주석 처리를 제거합니다 (제거 #).
  3. 저장 httpd.conf
  4. WAMP 다시 시작

작동해야합니다!


나는 같은 문제가 있었고 해결책은 Apache2에서 다시 쓰기 모드를 활성화하는 것이 었습니다.

터미널에서 다음 명령을 사용하십시오.

$ sudo a2enmod rewrite
$ sudo service apache2 restart

그리고 마법!


똑같은 문제가있었습니다.

이 문제를 해결하려면 다음 두 가지를 수행해야합니다.

  1. Apache에서 rewrite_module 활성화
  2. AllowOverride 를 None에서 All으로 변경합니다 (예 : Apache 2.4.9).

    옵션 인덱스 FollowSymLinks MultiViews AllowOverride All 모두 승인 필요

참고 : Laravel Homestead를 WAMP 대신 VirtualBox 및 Vagrant와 함께 사용하십시오. Apache 대신 Nginx가 포함되어 있지만 Laravel에 대해 명시 적으로 구성되어 있으므로 모든 것이 기본적으로 작동합니다.


mod_rewrite를 활성화 한 후에도 laravel / public 폴더의 별칭을 지정하면이 문제가 발생할 수 있습니다.

첨가

RewriteBase /your_apache_alias

.htaccess에 트릭이 있습니다.


집 이외의 것을 정의 할 때는 /가 필요하지 않습니다.

Route::get('hello', function()
{
    return View::make('hello');
});

작동해야합니다.


UBUNTU 사용자 용-Ubuntu 18.04 용으로 테스트 됨

1- 모드 재 작성 활성화

sudo a2enmod rewrite

2- Apache conf 파일에서 AllowOverride 변경 :

sudo nano /etc/apache2/apache2.conf

이 블록에서 AllowOverride를 없음에서 모두로 변경

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3- Apache 다시 시작

sudo service apache2 restart

나는 성공하지 못한 채이 모든 것을 시도한 다음 다른 게시물을 발견하고 .htaccess를 이것으로 변경했습니다.

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>

Laravel 4는 정적 파일의 맵에서 파일을 자동로드하므로 새 컨트롤러를 추가 할 때 해당 파일을 업데이트해야합니다. 다음 명령을 실행하여 정적 파일을 다시 빌드하십시오.

php composer.phar dump-autoload

이전 답변에는 약간의 결함이 있습니다. 이것은 도움이 될 수 있습니다.

$ sudo a2enmod rewrite
$ sudo service apache2 restart

희망합니다.


이 문제가 발생했습니다 (Apache 2.2가 수동으로 설치된 Windows에서). 원인은 AllowOverridehttpd.conf의 루트 디렉토리가 기본적으로 None으로 설정되어 있으므로 내 VirtualHost에서 누락되었습니다 .

FileInfo Options=MultiViews Laravel의 .htaccess에 필요한 최소한의 세트입니다.

예 :

<VirtualHost *:80>
    DocumentRoot "C:/htdocs/domain.com/laravel/public"
    ServerName foo.domain.com

    <Directory "C:/htdocs/domain.com/laravel/public">
        AllowOverride FileInfo Options=MultiViews
    </Directory>
</VirtualHost>

또는 AllowOverride All이것이 작동하지 않고 보안에 신경 쓰지 않는 경우 사용 하십시오.


It's pretty clear that the problem appears because of the "mod_rewrite", in some cases just enabling this module in Apache is enough to get it fixed.

However, in my case, I had to extend the configuration for the VirtualHost in the following way:

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin sergey.donchenko@gmail.com
    DocumentRoot /var/www/adplus.local/project/public

    **<Directory "/var/www/adplus.local/project/public">
        AllowOverride All
    </Directory>**

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

It's like @GaryJ & @MartinGomez said. This is the content of the .htaccess that should be set on the public folder for all your laravel 4 projects running on Apache server:

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

    RewriteEngine On
    RewriteBase /

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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

Go to

nano /etc/nginx/sites-available/yoursite

find try_file and replace as below:

try_files $uri $uri/ /index.php?$query_string;


For Nginx users, you probably copied the the default virtualhost - but Laravel requires some customization on the location directive to allow the Laravel application to do the routing and not Nginx.

In your /etc/nginx/sites-available/your-site-name replace the location directive with this:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

Then run sudo service nginx reload to make the changes come into effect.


I had a similar problem on Ubuntu 14.04 with Lumen 5.4.

The solution was two parts for me. First in my vhost file /etc/apache2/sites-enabled/my_vhost.conf, I had to add the following <Directory> entry to allow overrides, after declaring my DocumentRoot:

    DocumentRoot /var/www/path/to/my/app/public

    <Directory "/var/www/path/to/my/app/public">
            Options FollowSymLinks
            AllowOverride All

            Order allow,deny
            Allow from all
    </Directory>

Next, I had to enable rewrites with:

sudo a2enmod rewrite
sudo service apache2 restart

This update worked for me. In the .htaccess file simply add the following after the Rewriterules are turned on.

Options -Indexes
Options +FollowSymLinks

Worked like charm


This comment may be a little late but it may help. I had the same problem when routing to another view like this:

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

Route::get('login', function () {
return view('login');
});

But didn't work so I tried everything i found in all the related posts but wasn't enough to solve my problem so i found this lines on the httpd.conf:

<Files ".ht*">
Require all denied
</Files>

So i changed "denied" to "granted" and also commented this line on my .htaccess:

#RewriteBase /

And worked!! I think this lines make Apache not consider the .htaccess file of your project so turning it to granted made the difference. Hope this can help someone with the same problem.

Working on Apache Server 2 @ Manjaro Linux (based on Archlinux)

참고URL : https://stackoverflow.com/questions/13514990/laravel-4-all-routes-except-home-result-in-404-error

반응형