[php] URL 생성 Laravel에서“public / index.php”를 제거하려면 어떻게해야합니까?

Laravel에서 생성 된 URL 을 제거 index.php하거나 제거해야합니다 public/index.php. 일반적으로 경로는 localhost/public/index.php/someWordForRoute다음과 같아야합니다.localhost/someWordForRoute.

.htaccess

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

RewriteEngine On

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

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

app / config / app.php

'url' => 'http://localhost',

어떻게 변경할 수 있습니까?



답변

옵션 1 : .htaccess 사용

아직없는 경우 Laravel 루트 디렉터리에 .htaccess 파일을 만듭니다. .htaccessLaravel 루트 디렉토리가 아직없는 경우 파일을 만듭니다 . (일반적으로 public_html폴더 아래에 있음 )

다음 코드를 포함하도록 .htaccess 파일을 편집하십시오.

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

이제 “/public/index.php/”부분없이 웹 사이트에 액세스 할 수 있습니다.

옵션 2 : ‘/ public’디렉토리의 항목을 루트 디렉토리로 이동

루트 디렉터리에 새 폴더를 만들고 공용 폴더를 제외한 모든 파일과 폴더를 이동합니다. 원하는대로 부를 수 있습니다. “laravel_code”를 사용하겠습니다.

다음으로 모든 것을 공용 디렉터리에서 루트 폴더로 이동합니다. 결과는 다음과 비슷합니다.
여기에 이미지 설명 입력

그런 다음 laravel_code/bootstrap/paths.php파일과 파일 의 위치를 ​​편집하기 만하면 index.php됩니다.

에서 것은 laravel_code/bootstrap/paths.php코드의 다음 줄을 찾습니다

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',

그리고 다음과 같이 변경하십시오.

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',

에서 index.php다음 줄을 찾습니다.

require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/start.php';

그리고 다음과 같이 변경하십시오.

require __DIR__.'/laravel_code/bootstrap/autoload.php';
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';

출처 : Laravel의 URL에서 / public /을 제거하는 방법


답변

나는 Laravel 4.2에서 이것을 시도했습니다.

server.phpLaravel 루트 폴더의 이름을로 바꾸고 디렉토리에서 Laravel 루트 폴더로 파일을 index.php복사 합니다..htaccess/public

나는 그것이 효과가 있기를 바랍니다


답변

내가 사용하고있는 아래 스 니펫의 다른 옵션과 혼동하지 마십시오. 루트에 아래 htacces를 넣으십시오.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    public/    [L]
    RewriteRule    (.*) public/$1    [L]
</IfModule>

공용 디렉토리로 이동하여 아래 코드 조각과 함께 다른 htaccess 파일을 넣으십시오.

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

작동 중 … !!!

.htaccess 아래의 Laravel 사용

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

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


답변

URL (Laravel 5)에서 공개를 제거하는 간단한 단계는 다음과 같습니다.

1 : 공용 폴더에서 모든 파일을 복사하여 laravel 루트 폴더에 붙여 넣습니다.

2 : index.php를 열고 변경

에서

 require __DIR__.'/../bootstrap/autoload.php';

 require __DIR__.'/bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

$app = require_once __DIR__.'/bootstrap/app.php';

laravel 4에서 경로 2는 $app = require_once __DIR__.'/bootstrap/start.php';대신$app = require_once __DIR__.'/bootstrap/app.php';/app.php

그게 다입니다.


답변

1) mod_rewrite가 활성화되어 있는지 확인하십시오. /etc/apache2/mods-enabled디렉토리로 이동 하여 rewrite.load가 사용 가능한지 확인하십시오 . 그렇지 않은 경우 명령 sudo a2enmod rewrite을 사용하여 활성화합니다. 다시 쓰기 모듈을 활성화합니다. 이미 활성화 된 경우 메시지가 표시됩니다 Module rewrite already enabled.
2) 공개 디렉토리에 대한 가상 호스트를 만들어주는 대신 http://localhost/public/index.php우리가 그런 식으로 사용할 수 있도록합니다 http://example.com/index.php. [따라서 공용 폴더 이름이 숨겨집니다]
3) 그런 다음 루트 디렉토리 (공용 폴더) 내에있는 URL에서 index.php를 숨길 .htaccess를 만듭니다.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]


답변

이것은 Laravel 및 Apache 구성과 관련된 모든 것과 관련이 거의 없습니다.

Apache 서버 구성에 대한 액세스 권한이 있습니까? 그렇다면 문서에서 이것을 확인하십시오.

일반적으로 주 서버 구성 파일에 액세스 할 수없는 경우에만 .htaccess 파일을 사용해야합니다. 예를 들어, 사용자 인증은 항상 .htaccess 파일에서 수행되어야한다는 일반적인 오해가 있으며, 최근에는 mod_rewrite 지시문이 .htaccess 파일에 있어야한다는 또 다른 오해가 있습니다. 이것은 사실이 아닙니다. 주 서버 구성에 사용자 인증 구성을 넣을 수 있으며, 실제로 이것이 작업을 수행하는 데 선호되는 방법입니다. 마찬가지로, mod_rewrite 지시문은 여러 측면에서 주 서버 구성에서 더 잘 작동합니다.

… 일반적으로 .htaccess 파일의 사용은 가능하면 피해야합니다. .htaccess 파일에 넣는 것을 고려하는 모든 구성은 주 서버 구성 파일의 섹션에서와 마찬가지로 효과적으로 만들 수 있습니다.

출처 : Apache 문서 .

제가 이것을 먼저 언급 한 이유는 .htaccess가능하면 완전히 제거 하고 Directory태그 안에 태그를 사용하는 것이 최선이기 때문입니다 VirtualHost. 즉, 나머지는 .htaccess어떤 이유로 든 경로를 고수하고 있다고 가정합니다 .

이를 분석하기 위해 몇 가지 일이 발생할 수 있습니다.

  1. 귀하의 파일이 .htacces귀하의 질문에 이름이 지정 되어 있다는 점은 의미가 없습니다 . 제 생각에는 오타이지만 간과하고 실제로 두 번째 s가 누락 된 경우에는 더 어려운 것을 찾고 벽에 머리를 두드리는 일종의 사소한 오류입니다. .

  2. 서버에서을 (를) 허용 할 수 없습니다 .htaccess. 이를 확인하려면 Apache 구성 파일로 이동하십시오. 최신 Apache 빌드에서는 일반적으로 하나의 구성 파일이 아니므로 앱이있는 위치에 관계없이 앱을 가리키는 파일을 사용하고 있는지 확인하십시오. 변화

    AllowOverride none
    

    …에

    AllowOverride all
    

    후속 조치로 Apache 문서는 보안상의 이유로 .htaccess재 작성 을 위해 모든 폴더에 대해이 작업을 수행하지 않도록 권장합니다 . 대신 추가해야하는 폴더에 대해 수행하십시오 .htaccess.

  3. 당신은 마 mod_rewrite활성화? 그것은 문제를 일으킬 수 있습니다. 상단에 태그가 <IfModule mod_rewrite.c>있습니다. 해당 태그를 주석 처리하고 Apache를 다시 시작하십시오. 오류가 발생하면 다음을 활성화해야하기 때문일 수 있습니다 mod_rewrite.
    Apache 2.2에 대해 mod_rewrite를 활성화하는 방법

도움이 되었기를 바랍니다. 가장 일반적인 문제 중 일부를 명명했지만 더 평범하거나 독특 할 수있는 몇 가지 다른 문제가 있습니다. 개발 서버에 대한 또 다른 제안? Apache를 다시 설치하십시오. 가능한 경우 좋은 튜토리얼을 통해 다른 소스에서 수행하십시오.


답변

Laravel 4 및 5의 경우 :

  1. server.phpLaravel 루트 폴더의 이름 을 다음으로 변경 하십시오.index.php
  2. 디렉토리에서 Laravel 루트 폴더.htaccess파일을 복사 합니다 ./public

그게 다야! 🙂