이러한 옵션 중 실제로 내가 찾던 것을 해결하지 못했습니다. 내가 결국 한 일은 다음과 같다. 저는 수십만 줄의 코드와 수백 개의 다른 파일로 제 3 자 Angular 프론트 엔드 템플릿 (The Angler from ThemeForest)을 사용하고 있습니다. 이러한 파일의 대부분은 스타일 시트와 일반 JavaScript 라이브러리 (Angular, JQuery 등)입니다. 해당 내용을 공용 폴더에 넣고 인증되지 않은 사용자에게 파일을 제공하는 것은 신경 쓰지 않습니다.
그러나 내 파일의 다른 부분은 수정 된 파일입니다. 예를 들어, 하나의 파일에는 내 독점 비즈니스 시스템의 전체 형식을 거의 레이아웃하는 내비게이션 요소가 있으며 비즈니스의 내부 운영에 대해 많이 말합니다. 따라서 탐색 HTML, CSS 및 js와 같은 간단한 것은 민감하므로 인증 된 사용자에게만 제공해야합니다.
내가 한 것은 공개 및 보호 된 콘텐츠를/public/*에있는 디렉토리 트리와/storage/app/*에있는 디렉토리 트리 (동일한 디렉토리 또는 유사한 디렉토리)로 분할 한 것입니다. 중요하지 않은 모든 컨텐츠 (대부분 템플릿 스타일 시트와 일반 JS 라이브러리)는 "공용"트리에 들어가고 민감한 컨텐츠는 내 "스토리지/응용 프로그램"트리에 저장됩니다. 그래서 예를 들면 :
# If the file exists in laravel/public and the URI does not specify ".php" then go get it.
RewriteCond %{DOCUMENT_ROOT}/laravel/public/%{REQUEST_URI} -f
RewriteCond %{REQUEST_URI} !^.*\.php$
RewriteRule ^(.*)$ laravel/public/$1 [L]
: htaccess로에서
- public --- js ----- someThirdPartyJavaScript.js ----- loginController.js (unprotected) ----- ... --- libs ----- angular.js ----- jquery.js ----- ... --- css ----- unprotectedStyleSheet.css ----- ... --- tpl ----- loginTemplate.html - storage (all protected content goes in this tree) --- app ----- js ------- myApp.js ------- directives --------- myCustomDirective.js --------- businessNavigationDirective.js (sensitive and proprietary) ----- css (for protected css files) ----- libs (for protected libs) ----- tpl (for protected .html files) ------- clientInformationSheet.html (sensitive content indicating the structure of our customer data)
, 나는 기본적으로 공공 트리에 존재하는 모든 파일을 반환하는 다음과 같은 규칙을 사용했다.htaccess는 다른 모든 요청을 Laravel index.php에서 처리하도록 보냅니다.
그런 다음 Laravel 5.2 경로를 만들어 내 Angular app 내의 경로를 모두 잡았습니다. 이러한 파일 저장 디렉토리에서 사용자에게 반환되지 않도록 사용자가 인증하지 않는 한 미들웨어 인증을 지정하는주의 :
use League\Flysystem\Util\MimeType as MimeType;
Route::any('/{any}', ['middleware' => 'auth', function($uri){
// Auth::logout();
$uri = storage_path('app/' . $uri);
if (!File::exists($uri)){
return "Path not found.";
}
$extension = File::extension($uri);
if (array_key_exists($extension, MimeType::getExtensionToMimeTypeMap())){
$mimeType = MimeType::getExtensionToMimeTypeMap()[$extension];
} else {
$mimeType = "text/plain";
}
return response(File::get($uri))
->header('Content-Type', $mimeType);
}])->where('any', '^MySuperCoolApplicationSubDirectory/.*');
유지 디렉토리 구조를 "공개"와 "저장/응용 프로그램"과 매우 유사한 그것을 만든 이번에는 인증되지 않은 사용자로부터 모든 민감한 콘텐츠가 차단되어 어떤 파일이 민감하고 어떤 파일이 아닌지를 쉽게 체계화 할 수 있었으며 응용 프로그램은 이전과 같이 계속 작동했습니다.
이것은 가깝지만,/templates에있는 블레이드 템플릿을 반환하지 않습니다. 예를 들어, public/myApp/css/style.css에있는 파일을 반환하려면 Laravel이 필요합니다. 유사한 파일이 js, html 및 기타 파일에 존재합니다. return 파일 ("public/{...}") 또는 무엇인가를 사용할 수 있습니까? 나는 브라우저에 다운로드 요청을 리턴한다고 생각한다. 하지만, 그게 효과가 있니? –
기본적으로 공용 폴더의 모든 항목은 해당 파일의 절대 경로가있는 모든 사용자가 공개적으로 사용할 수 있습니다. 경로가 Laravel Routes보다 우선합니다. 정적 파일을 인증하려면 PHP를 통해 제공해야합니다. 이는 매우 나쁜 습관이며 느려집니다. 추천하지 않습니다. 또한 JS 및 CSS 파일은 공개 될 예정입니다. 그 (것)들을 보호 할 필요가있는 경우에 아마 당신의 건축술에 무언가가있다. –
다른 해결 방법으로 답변을 업데이트했습니다. –