나는 이것이 매우 인기있는 질문이라는 것을 알고 있지만 Laravel 5에 대한 효과적인 해결책을 찾지 못했습니다. Codeigniter에서 오랫동안 마이그레이션을 시도했지만이 복잡한 설치 프로세스로 인해 계속 벗어날 수 있습니다.
VM을 실행하고 싶지 않습니다. 프로젝트 간을 전환 할 때 어색해 보입니다.
문서 루트를 공용 폴더로 설정하고 싶지 않습니다. 프로젝트 간을 전환 할 때도 어색합니다.
.htaccess mod_rewrite 메소드를 시도했습니다
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
컴파일 된 PHP 줄 7610에 Laravel NotFoundHttpException이 표시됩니다.
얼마 전에 L4를 사용해 보았을 때 공용 폴더의 내용을 루트로 옮기는 방법을 사용했습니다. L5의 구조는 매우 다르며 동일한 단계를 수행하면 Laravel이 완전히 중단됩니다 (서버는 빈 페이지 만 반환 함).
다음과 같은 개발 환경에서 ‘공개’를 제거하는 적절한 방법이 있습니까?
- L5와 호환
- 프로젝트를 쉽게 전환 할 수 있습니다 (보통 한 번에 2 개 또는 3 개로 작업하고 있습니다).
감사
** MAMP와 PHP 5.6.2를 사용하고 있습니다
답변
라 라벨 5의 경우 :
server.php
Laravel 루트 폴더의 이름 을index.php
- 디렉토리에서 Laravel 루트 폴더로
.htaccess
파일을 복사하십시오/public
.
그게 다야!
답변
두 가지 답변을 사용하여 문제를 해결했습니다.
- server.php를 index.php로 이름 바꾸기 (수정 안 됨)
- 공용 폴더에서 루트 폴더로 .htaccess를 복사하십시오 (예 : rimon.ekjon은 아래 언급)
-
정적 변수의 경우 .htaccess를 다음과 같이 약간 변경하십시오.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
다른 정적 파일이 필요한 경우 확장명을 이전에 선언 된 목록에 추가하십시오.
답변
Laravel에서 5.5는 다음 코드를 루트 디렉토리에 .htacess 파일을 생성하고 배치 : – 참조 링크
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
</IfModule>
답변
하지마!
server.php
Laravel 루트 폴더의 이름을 바꾸 index.php
거나 복사 하지 않아야 합니다..htaccess
거나 /public
디렉토리에서 Laravel 루트 폴더로 파일을 합니다 !!!
이렇게하면 모든 사람이 일부 파일에 액세스 할 수 있습니다 (.env
예 :). 직접 해보십시오. 당신은 그것을 원하지 않습니다!
하다
대신 다음 .htaccess
과 같이 루트에 파일을 작성해야 합니다.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
그러면 모든 기본 URI가 /public
폴더에 자동으로 다시 작성됩니다 . 모든 헤더 ( 예 : HTTP 권한 부여 헤더 ) 및 모든 선택적 URI 매개 변수도 자동으로/public
폴더로 .
그게 다야
Docker를 사용하여 Laravel 프로젝트를 설정할 때 참고하십시오.
답변
laravel 5 url에서 공개를 제거하는 쉬운 방법. 공용 디렉토리에서 index.php와 .htaccess를 잘라내어 루트 디렉토리에 붙여 넣으면 index.php의 두 줄을 다음과 같이 바꿀 수 있습니다.
require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';
참고 : 위의 방법은 초보자가 가상 호스트를 설정하는 데 문제가있을 수 있으므로 로컬 컴퓨터에서 가상 호스트를 설정하고 프로젝트의 공용 디렉토리를 가리키는 것이 가장 좋습니다.
답변
@ rimon.ekjon는 말했다 :
Laravel 루트 폴더에서 server.php의 이름을 index.php로 바꾸고 .htaccess 파일을 / public 디렉토리에서 Laravel 루트 폴더로 복사하십시오. -그게 다야! 🙂
그것은 나를 위해 일하고 있습니다. 그러나 asset () 도우미를 사용했기 때문에 / public 디렉토리의 모든 리소스 파일을 찾지 못해 URL을 요청할 수 없었습니다.
/Illuminate/Foundation/helpers.php/asset () 함수를 다음과 같이 변경했습니다.
function asset($path, $secure = null)
{
return app('url')->asset("public/".$path, $secure);
}
이제 모든 것이 작동합니다 🙂
@ rimon.ekjon과 여러분 감사합니다.
답변
그냥 만들 htaccess로 루트에 파일을하고 여기에이 줄을 추가
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
그게 다야!
위 코드는 루트 public_html 폴더에서 작동합니다. 핵심 laravel 파일이 public_html 폴더 안에 있어야한다고 말한 경우 디렉토리가 public_html / laravelapp / public처럼 보이고 위의 코드를 laravelapp 안에 넣으면 작동하지 않습니다. 따라서 모든 핵심 파일을 public_html에 복사하고 .htaccess 파일을 거기에 두어야합니다.
코드를 서브 디렉토리에 유지하려면 서브 도메인을 작성할 수 있습니다. 그러면이 코드도 작동합니다.