web-dev-qa-db-ja.com

laravelのパブリックフォルダーを避け、Webサーバーでルートを直接開く

これを解決するために、インターネット上のすべての可能なサンプルを調べていました。それでもそれは頭痛です。

www.mylaravelsite.com/public/の 'public'を避け、ルートディレクトリのwww.mylaravelsite.comのようにしたいだけです。

今、私はセキュリティの懸念を避けたくないので、.htaccessが最良の方法であることを学びました。

ソリューションの友達はいますか?

相互作用に感謝します!

36

サーバーにこのフォルダー構造があると仮定しましょう

.cpanel/
public_html/
public_ftp/
..

そして、laravelフォルダ構造は

app/
bootstrap/
public/
vendor/
composer.json
artisan
..

サーバー上にpublic_htmlおよびpublic_ftpフォルダーとインラインでmylaravelsiteフォルダー名を作成し、パブリックフォルダーを除くlaravelアプリケーション全体にコピーして貼り付けることができますすべてのコンテンツはpublic_htmlにあるため、次のようになります。

.cpanel/
public_html/
public_html/packages
public_html/vendor
public_html/index.php
public_html/.htaccess
...
public_ftp/
mylaravelsite/
mylaravelsite/app
mylaravelsite/bootstrap
...

public_html/index.phpで、次の行を変更します。

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

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

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

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

また、/mylaravelsite/bootstrap/paths.phpパブリックパスを変更することを忘れないでください。使用することもできます。

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

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

サイトが実行されている必要があります。

53
lukaserat

ルートフォルダーに.htaccessを作成し、次の行を記述します

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

実稼働サーバーの場合、ドメインをパブリックフォルダーに直接ポイントすることをお勧めします

20
Anik

不足している情報は次のとおりです。

ドキュメントルート

これは「Webルート」とも呼ばれます。 Apacheは具体的にそれを DocumentRoot と呼びます-公式の説明についてはそのリンクをクリックしてください。

基本的には、サーバーがファイルを取得するディレクトリを設定します。 Laravelでは、ドキュメントルートはpublicフォルダーである必要があります。

DocumentRootをpublicに設定すると、ブラウザーでhttp://mylaravelsite.comに移動すると、実際にpublicフォルダーを「指す」ことになります。

.htaccessファイル(実際には、 仮想ホスト構成 で可能性が高い)で、サイトのDocumentRootを設定できます。

DocumentRoot /path/to/laravel-app/public

これをどのように設定するかは、ホスティングによって異なります。各ホスティングには、ウェブサイトをセットアップするさまざまな方法がありますので、具体的にあなたに答えることはできません。ウェブホスティングテクニカルサポートにご相談ください。重要な点は、publicディレクトリがWebルートであり、他のすべてが「Webルートの背後」にあることです。

公正な警告tho:一部のホスティングプロバイダーは、それを達成するための十分なアクセス権を提供していません。

14
fideloper

webディレクトリをpublic/にポイントします。 Apacheを使用している場合、これは機能します。

<VirtualHost *:80>
  DocumentRoot /var/www.mylaravelsite.com/public/
  ServerName www.mylaravelsite.com
</VirtualHost>
5
lukaserat

ここに解決策がありますが、実際のプロジェクトでそれをしてはいけません、それは単にLaravelと私がlaravel 5.0とそれでテストしましたは、パブリックフォルダーからindex.phpおよび.htaccessファイルを切り取り、ルートディレクトリに貼り付けて、これらの2行を次のように変更します。

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

環境をテストせずに上記の方法を使用しないことを強くお勧めします。代わりに仮想ホストを使用する必要があります。

3
Muhammad Sadiq

.htaccessファイルをLaravel rootが存在しない場合はrootに追加し、その中に次の行を追加します。

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

laravelプロジェクトファイル内の.envファイルを変更するだけです。iflaravel

Root/domain/public_html/laravel /

.envファイルに移動して編集します

アプリのURLパスを編集する必要があります

APP_URL = http://www.domainname.com/laravel/public/

これでプロジェクトが実行されます。 laravelファイルがpublic_htmlにある場合、アプリのURLは次のようになります

APP_URL = http://www.domainname.com

ありがとう

1
Chetan Bhootra

ルーメン用

次のようなフォルダパスがあるとしましょう:/ var/www/project/microservice(Lumen src)

/ var/www => localhost /のドキュメントルート

目的のターゲット:localhost/project/microservice [/ foo ...] => localhost/project/microservice/public/foo ...

私はこれを以下のように.htaccess(/ projectフォルダに配置)で行います:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/public/.*
RewriteCond %{REQUEST_URI} ^(/[^/]+/[^/]+/).*
RewriteRule ^[^/]+(.*)$ %1public$1 [L,R=301,P]
0
xuanhvh