web-dev-qa-db-ja.com

Laravel 5 - URLから一般公開を削除

これは非常によく知られた質問ですが、Laravel 5.のための実用的な解決策を見つけることができませんでした。私は長い間Co​​deigniterから移行しようとしてきました。私を先送りにします。

私はVMを実行したくありません、これはプロジェクトを切り替えるときにぎこちないようです。

私は自分のドキュメントルートをパブリックフォルダに設定したくありません。これはプロジェクトを切り替えるときにも面倒です。

私は.htaccess mod_rewriteメソッドを試してみました

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

これは、compile.php 7610行目で、Laravel NotFoundHttpExceptionを返すだけです。

しばらく前にL4を試したとき、パブリックフォルダの内容をルートに移動する方法を使用しました。 L5の構造はかなり異なり、同じステップに従うとLaravelが完全に壊れました(サーバーは空白のページのみを返します)。

次のような開発環境で「public」を削除するための適切な方法はありますか。

  1. L5で動作します
  2. 私は簡単にプロジェクトを切り替えることができます(私はいつも2つか3つの作業をしています)。

ありがとう

** MAMPとPHP 5.6.2を使用しています

196
user1537360

Laravel 5の場合:

  1. Laravelルートフォルダのserver.phpindex.phpに名前変更します
  2. .htaccessディレクトリから/publicファイルをLaravelルートフォルダにコピーします。

それでおしまい!

378
Asfaq Tamim

私は2つの答えを使って問題を解決しました:

  1. Server.phpの名前をindex.phpに変更する(変更なし)
  2. パブリックフォルダからルートフォルダに.htaccessをコピーします(rimon.ekjonが後述するように)。
  3. 以下のように静的に.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]
    

    他に 静的ファイル が必要な場合は、前の宣言リストに拡張子を追加するだけです。

109
ka_lin

Laravel 5.5に、ルートディレクトリに.htaccessファイルを作成し、次のコードを配置します。 - Reference Link

<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>
53
Raham

Laravel 5のURLから一般公開を削除する簡単な方法。あなたはただpublicディレクトリからindex.phpと.htaccessを切り取り、それを全てrootディレクトリに貼り付け、index.phpの2行を次のように置き換えるだけです。

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

@ 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、そしてみなさんありがとうございます。

35
Miron

1) L5 にパブリックディレクトリを移動するための実用的な方法が見つかりませんでした。ブートストラップindex.phpでいくつかのことを変更することができますが、いくつかのヘルパー関数はそのパブリックディレクトリがそこにあるという仮定に基づいているようです。正直なところ、あなたは本当にパブリックディレクトリを移動してはいけません。

2) _ mamp _ を使用している場合は、プロジェクトごとに新しい仮想ホストを作成し、それぞれがそのプロジェクトのパブリックディレクトリを提供するようにします。作成したら、次のように定義済みのサーバー名で各プロジェクトにアクセスします。

http://project1.dev
http://project2.dev
22
Jeremy Schaffer

ルートに .htaccess fileを作成してこれらの行を追加するだけです。

<IfModule mod_rewrite.c>
    RewriteEngine On

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

それでおしまい!

上記のコードは、ルートのpublic_htmlフォルダに対して機能します。あなたのディレクトリがpublic_html/laravelapp/publicのように見えていて、あなたがlaravelappの中に上記のコードを入れているならば、あなたのコアlaravelファイルはpublic_htmlフォルダの中にあるべきであると言った。したがって、すべてのコアファイルをpublic_htmlにコピーして、そこに.htaccessファイルを配置する必要があります。

あなたがサブディレクトリにコードを保存したいなら、あなたはサブドメインを作成することができます、そしてこのコードはそれのために働くでしょう。

21

Laravel5の public urlを削除することは可能です。次の手順を実行します:

ステップ1. public からすべてのファイルをコピーし、 root ディレクトリに貼り付けます

ステップ2.open 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';

そして、すべてのキャッシュとクッキーを削除してください。

12
piyush patel

他のすべてのファイルとディレクトリを 'locale'という名前のフォルダに置いたとしましょう。

enter image description here

Index.phpに行き、次の2行を見つけてください。

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

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

そしてこれを次のように変更します。

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

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

しないでください。

本当にお勧めしません Laravelルートフォルダのserver.phpindex.phpに変更し、.htaccessディレクトリからLaravelルートフォルダに/publicファイルをコピーします。

これにより、誰もがあなたのファイルのいくつかにアクセスすることができます(例えば.env)。試してみてください。あなたはそれが欲しくありません!


行う

代わりに、このようにあなたのルートに.htaccessファイルを作成するべきです:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

これはあなたのすべてのベースURIを/publicフォルダに静かに書き換えます。 HTTP:AuthorizationとURIのパラメータでさえ黙って/publicフォルダに渡されます。

それでおしまい!

9

BESTアプローチ: publicを削除することをお勧めしません。代わりにon local computer create a virtual Host point to public directoryon remote hosting change public to public_html and point your domain to this directoryを使用します。その理由は、あなたの全体のlaravelコードはあなたのパブリックディレクトリにその1つ下のレベルなので安全になるでしょう:)

方法1:

server.phpindex.phpに名前変更しただけでうまくいきます。

方法2:

これは、すべてのlaravelバージョンに適しています...

これが私のディレクトリ構造です。

/laravel/
... app
... bootstrap
... public
... etc

次の簡単な手順に従ってください

  1. すべての ファイルをpublicディレクトリからroot/laravel/ に移動します。
  2. これで、パブリックディレクトリは不要になりました。オプションで今すぐ削除できます。
  3. 今index.phpを開き、次のように置き換えます

_ dir _ 。 '/ ../bootstrap/autoload.php';

_ dir _ 。 '/ bootstrap/autoload.php';

そして

$ app = require_once _ dir _ 。 '/ ../bootstrap/start.php';

$ app = require_once _ dir _ 。 '/ bootstrap/start.php';

  1. 今bootstrap/paths.phpを開き、パブリックディレクトリのパスを変更します。

'public' => _ dir _ 。 '/ ../public'、

'public' => _ dir _ 。 '/ ..'、

これで終わりです。今度はhttp:// localhost/laravel /を試してください。

8
Wasim A.

これは私のために働く最善と最短の解決策です may、2018年Laravel 5.5

  1. .htaccessファイルを /public ディレクトリから root ディレクトリに切り取り、その内容を次のコードに置き換えます。

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
           Options -MultiViews
        </IfModule>
    
        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 ^ server.php [L]
    
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_URI} !^/public/
        RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    </IfModule>
    
  2. .htaccessファイルを保存するだけでそれがすべてです。

  3. server.phpファイルの名前をindex.phpに変更します。それがすべてです お楽しみください!

6
tony pro

@Humble Learnerに追加し、資産のURLパスを「修正」する適切な場所は/Illuminate/Routing/UrlGenerator.php/asset()です。

一致するようにメソッドを更新します。

public function asset($path, $secure = null)
{
    if ($this->isValidUrl($path)) return $path;
    $root = $this->getRootUrl($this->getScheme($secure));
    return $this->removeIndex($root).'/public/'.trim($path, '/');
}

これにより、スクリプト、スタイル、および画像パスが修正されます。資産パスのための何でも。

6
Sean Perkins

XAMPPユーザーがlaravelのデフォルトのファイルシステムに触れずにURLからpublicを削除するには、このjsutを実行するようにアプリケーションの仮想ホストを設定します。

  1. XAMPPコントロールパネルアプリケーションを開き、Apacheを停止します。最近のWindowsマシンではサービスとして実行される可能性があるため、Apacheモジュールの左側にあるチェックボックスをオンにします。

  2. C:/xampp/Apache/conf/extraまたはXAMPPファイルがある場所に移動します。

  3. テキストエディタでhttpd-vhosts.confという名前のファイルを開きます。

  4. 行19の周りで#NameVirtualHost *:80を見つけて、そのハッシュをコメント解除するか削除してください。

  5. ファイルの一番下に、次のコードを貼り付けます。

<VirtualHost *>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs" # change this line with your htdocs folder
    ServerName localhost
    ServerAlias localhost
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks Includes ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. これで、上記のコードをコピーして貼り付けて仮想ホストディレクトリを追加できます。たとえば、私はEatery Engineというサイトで作業しているので、次のコードでローカルインストールのサブドメインを操作できます。
<VirtualHost eateryengine.dev>
    ServerAdmin [email protected]
    DocumentRoot "C:/xampp/htdocs/eateryengine" # change this line with your htdocs folder
    ServerName eateryengine.dev
    ServerAlias eateryengine.dev
    <Directory "C:/xampp/htdocs/eateryengine">
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
  1. 次にWindowsホストファイルに進んでHOSTSを編集します。ファイルはC:/Windows/System32/drivers/etc/hostsに配置されます。ここで、hostsはファイルです。メモ帳で開きます。
  2. #localhostの名前解決はDNS自体の中で処理されます。

127.0.0.1 localhost

localhostの名前解決はDNS自体の中で処理されます。

127.0.0.1       localhost
127.0.0.1       eateryengine.dev #change to match your Virtual Host.
127.0.0.1       demo.eateryengine.dev #manually add new sub-domains.
  1. Apacheを再起動してすべてをテストしてください。

元の記事を見つけることができます ここ

5
sunny kashyap

Laravel設定にパブリックフォルダを置く理由は常にあります。パブリック関連のものはすべてパブリックフォルダ内に存在する必要があります。

あなたのIPアドレス/ドメインをLaravelのルートフォルダに向けないで、パブリックフォルダに向けないでください。 .htaccessに制限を記述しない限り、他のファイルに簡単にアクセスできるため、サーバーIpがルートフォルダーを指すのは危険です。

.htaccessファイルに書き換え条件を書き込んで書き換えモジュールをインストールして書き換えモジュールを有効にするだけで、経路に公になる問題が解決されます。

4
Reiah Paul Sam

root ディレクトリに.htaccessファイルを作成し、以下のようなコードを配置します。

<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>
3
Pallav Nagar
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteRule ^(.*)$ public/$1 [L]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # 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]
</IfModule>

Mod_rewriteモジュールを有効にします。

Sudo a2enmod rewrite

そしてApacheを再起動します

Sudo service Apache2 restart

.htaccessファイル内からmod_rewriteを使用する(これは非常に一般的な使用例です)には、デフォルトのVirtualHostを以下のように編集します。

Sudo nano /etc/Apache2/sites-available/000-default.conf

「DocumentRoot/var/www/html」の下に次の行を追加します。

<Directory "/var/www/html">
AllowOverride All
</Directory>

サーバーを再起動します。

Sudo service Apache2 restart
2
mujuonly

私は以前にいくつかの記事を読んだことがあります、そしてそれはうまくいっていますが、本当に安全かどうかわからない

    a. Create new folder local.
    b. Move all project into the local folder expect public folder.
    c. Move all the content of public folder to project root.
    d. Delete the blank public folder
    f. Edit the index file. 

Index.phpを編集します

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

require __DIR__.'/local/bootstrap/autoload.php';
$app = require_once __DIR__.'/local/bootstrap/app.php';
2
Yousef Altaf

まず、あなたはこのステップを使うことができます

Laravel 5の場合:

1. Laravelルートフォルダのserver.phpの名前をindex.phpに変更します。

2. .htaccessファイルを/ publicディレクトリからLaravelルートフォルダにコピーします。

出典: https://stackoverflow.com/a/28735930

これらの手順に従った後は、すべてのCSSとスクリプトパスを変更する必要がありますが、これは面倒です。

解決策の提案 :単にhelpers::asset関数をマイナーチェンジすることができます。

このために

  1. vendor\laravel\framework\src\Illuminate\Foundation\helpers.phpを開く

  2. 後藤線130

  3. "public/".$pathの代わりに$pathを書く、

    function asset($path, $secure = null){
       return app('url')->asset("public/".$path, $secure);
    }
    
2
Ferhat KOÇER

問題は、/ publicと入力してもURLで使用できる場合、public/index.phpに配置する必要がある修正を作成したことです。

  $uri = urldecode(
     parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
  );

  if(stristr($uri, '/public/') == TRUE) {

    if(file_exists(__DIR__.'/public'.$uri)){

    }else{

      $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_Host']}{$_SERVER['REQUEST_URI']}";
      $actual_link = str_replace('public/', '',$actual_link);
      header("HTTP/1.0 404 Not Found");
      header("Location: ".$actual_link."");
      exit();
      return false;
   }}

このコードの平和は、URLからパブリックを削除し、404を与え、パブリックなしでURLにリダイレクトします

1
Paul De Zwaan

私が使用する別の方法は、htdocsまたはwww i.e. ln projectname/public projectのlnコマンドを使用してシンボリックリンクを作成することです(Linuxでは、Winについては知りません)

1
Eli Makumba

Laravel 5.5

初めてLaravelをインストールした後、私は有名な "パブリックフォルダの問題"に直面しました、そして私は私の個人的な意見では他のものより "私は"この解決策を思いつきましたWeb上で見つかりました。


実績

  • URIにpublicという単語を含めないでください
  • .envファイルを不審な人々から保護する

.htaccessと4つの簡単なルールを使ってmod_rewriteを編集するだけですべてができます。


ステップ

  1. メインルートの.htaccesspublic/.htaccessファイルを移動します
  2. 以下のように編集してください

私はすべてにコメントしたので、mod_rewriteを一度も使ったことがない人にも明らかになるべきです(私は専門家ではない、まったく反対です)。また、規則を理解するために、Laravelでは、Billがhttps://example.comに接続すると、https://example.com/index.phpがロードされることを明確にしなければなりません。このファイルには、要求をhttps://example.com/public/index.phpに送信するコマンドheader("refresh: 5; https://example.com/public/")が含まれています。この2番目のindex.phpは、コントローラーやその他のものをロードする責任があります。

# IfModule prevents the server error if the app is moved in an environment which doesn’t support mod_rewrite
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # RULES ORIGINALLY IN public/.htaccess ---
    # 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]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    # --- END

    # PERSONAL RULES ---
    # All the requests on port 80 are redirected on HTTPS
    RewriteCond %{SERVER_PORT} ^80$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

    # When .env file is requested, server redirects to 404
    RewriteRule ^\.env$ - [R=404,L,NC]

    # If the REQUEST_URI is empty (means: http://example.com), it loads /public/index.php
    # N.B.: REQUEST_URI is *never* actually empty, it contains a slash that must be set as match as below
    # .* means: anything can go here at least 0 times (= accepts any sequence of characters, including an empty string)
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*) /public/index.php [L]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI !== css||js||images/whatever => server loads /public/index.php, which is responsible to load the app and the related controller
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^(css|js|images|media)/(.*)$ /public/index.php [L,NC]

    # If the current request is asking for a REQUEST_FILENAME that:
    # a) !== existent directory
    # b) !== existent file
    # => if URI == css||js||images[=$1]/whatever[=$2] => server loads the resource at public/$1/$2
    # If R flag is added, the server not only loads the resource at public/$1/$2 but redirects to it
    # e.g.: bamboo.jpg resides in example.com/public/media/bamboo.jpg
    #       Client asks for example.com/media/bamboo.jpg
    #       Without R flag: the URI remains example.com/media/bamboo.jpg and loads the image
    #       With R flag: the server redirects the client to example.com/public/media/bamboo.jpg and loads the image
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(css|js|images|media)/(.*)$ /public/$1/$2 [L,NC]
    # --- END

</IfModule>

以下のルール(もともとpublic/.htaccess内)は削除することができます。実際、同じ規則が最後の2つの規則の中でより詳細に説明されています。

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

EDIT:私は逃した Abhinav Saraswatの解決策 そして彼の答えは受け入れられたものであるべきです。ファイルを変更せずにすべてのトラフィックをパブリックフォルダにリダイレクトする、1つの単純で明確な規則。

1
Brigo

URLから一般公開を削除する4つの最良の方法。

URLから一般公開を削除するのに他のトリックを使用した場合は、server.phpの名前をindex.phpに変更し、コアファイルパスに変更します。明らかに、そうしないでください。それではなぜそれを行うのが適切な方法ではないのでLaravelがこのような解決策を与えないのですか。

1)Laravel でhtaccessを使用してURLからpublicを削除します

.htaccessファイルをルートに追加することで、一般の人なしでウェブサイトにアクセスすることができます。

<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>

2)ローカルに仮想ホストを作成して一般公開を解除する

ここではWindowオペレーティングシステムのデモをしています。しかし、私は誰でも簡単にステップに従うことができるようにステップを定義しようとします。特定のオペレーティングシステムについても同様にGoogleで調査することができます。

ステップ1: C:¥Windows¥system32¥drivers¥etc¥に移動し、「hosts」ファイルを管理者モードで開きます。

ステップ2: 以下のコードを追加してください。ここで、私はあなたにprojectname.localドメイン名demoのデモを与えています、あなたはあなたが好きなようにあなたが指定することができます。どこでも一定にしてください。

127.0.0.1  projectname.local

ステップ3: xamppユーザーとampユーザーのC:\xampp\Apache\conf\extra"C:\wamp\bin\Apache\Apache2.4.4\conf\extra"に行き、"httpd-vhosts.conf"ファイルを開きます。次のコードを追加してください。

Notes:プロジェクトに従ってドキュメントルートを変更すると、定義したドメイン名も "hosts"ファイルに追加されます。

<VirtualHost projectname.local>
      ServerAdmin projectname.local
      DocumentRoot "C:/xampp/htdocs/projectdir"
      ServerName projectname.local
      ErrorLog "logs/projectname.local.log"
      CustomLog "logs/projectname.local.log" common
 </VirtualHost>

ステップ4:最後に重要なステップは、XamppまたはWampを再起動してhttp://projectname.localのようなURLにアクセスすることです。あなたのLaravelはパブリックURLなしで応答します。


3)Laravel でコマンドを実行して一般公開を解除します

あなたがローカルで作業しているなら、あなたは何もする必要はありませんあなたの端末またはコマンドラインツールから以下のコマンドを実行するだけでよいです。その後、あなたはコマンドラインで提供されたURLであなたのウェブサイトにアクセスすることができます。

   > php artisan serve

あなたが特定のIPであなたのプロジェクトを実行しても構わないと思っているなら、あなたは以下のコマンドを実行する必要があります。あなたがLANで作業しているならば、あなたが他の人にあなたのウェブサイトにローカルからアクセスさせたいならばあなたはあなたのIPアドレスをコマンドに従って走らせた後に "ipconfig"を実行することによってコマンドラインを使ってあなたのIPアドレスをチェックする必要があります。

> php artisan serve --Host=192.168.0.177

特定のポートを使用して特定のIPでプロジェクトを実行したい場合は、次のコマンドを実行する必要があります。

> php artisan serve --Host=192.168.0.177 --port=77

4)ホストされているサーバーまたはcpanelのパブリックを削除します

enter image description here

プロジェクトが完了したら、サーバーでプロジェクトをホストする必要があります。次に、ドメインのドキュメントルートをパブリックフォルダに設定するだけです。下のスクリーンショットを確認してください。

スクリーンショットのとおり、public_htmlにプロジェクトフォルダがない場合は、ドキュメントルートを"public_html/public"のように設定するだけです。

1
Mayank Dudakiya

たとえLaravelをルートフォルダに置くことをお勧めしないとしても、回避できない場合があります。そのような場合、上記の方法はアセットでは動作しないので、htaccessを変更する簡単な修正を行いました。server.phpをindex.phpにコピーした後、.htaccessファイルを次のように編集します。

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

    RewriteEngine On

    ### fix file rewrites on root path ###
    #select file url
    RewriteCond %{REQUEST_URI} ^(.*)$
    #if file exists in /public/<filename>
    RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
    #redirect to /public/<filename>
    RewriteRule ^(.*)$ public/$1 [L]
    ###############

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

    # Handle Front Controller...

    #RewriteCond %{REQUEST_FILENAME} -d # comment this rules or the user will read non-public file and folders!
    #RewriteCond %{REQUEST_FILENAME} -f #
    RewriteRule ^ index.php [L]
</IfModule>

誰もがそれをアップグレードして大歓迎ですので、これは私がしなければならなかった迅速な修正でした。

1
Plokko

たった2つのステップに従うことができます。

  1. publicフォルダーから.htaccessを切り取り、ルート(メインフォルダー)に貼り付けます
  2. ルートディレクトリでserver.phpファイルの名前をindex.phpに変更します。 (メインフォルダ)
0
Yagnesh bhalala

ルートディレクトリに.htaccessファイルを作成し、以下を貼り付け/保存するだけで、多くの作業を行う必要はありません。

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

これらの行をあなたのroot htaccessフォルダに追加してください。これはRewriteCond上でRewriteEngineというジョブを実行します%{REQUEST_URI}!public/RewriteRule(。*)/ public/$ 1 [L]

0
Yugaprashanthan

私はここでいくつかの解決策を試してみたし、このようにlaravel 5.2のために働く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 ^ server.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
RewriteRule ^.env - [F,L,NC]
RewriteRule ^app - [F,L,NC]
RewriteRule ^bootstrap - [F,L,NC]
RewriteRule ^config - [F,L,NC]
RewriteRule ^database - [F,L,NC]
RewriteRule ^resources - [F,L,NC]
RewriteRule ^vendor - [F,L,NC]

禁止するファイルやフォルダが他にある場合は追加するだけです

RewriteRule ^your_file - [F,L,NC]
0
adam

あなたはさまざまな方法を使用してURLから公開キーワードを削除することができます。

1)専用ホスティングを使用していて、rootアクセス権がある場合は、仮想ホストを使用してURLからpublicキーワードを削除できます。あなたはpublicでDocumentRootパスを与えるべきです。だからこれは、パブリックディレクトリからインデックスを開始し、URLからそれを削除します。

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/{yoursourcedirectory}/public

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

2)あなたがあなたのホスティングのルートアクセス権を持っていないなら、あなたはあなたのルートディレクトリに新しい.htaccessファイルを作成し、以下のようにコードを置くべきです

<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>

あなたはより多くの reference をここで得ることができます。

0
Vinod Joshi

ステップ1: rootディレクトリの/ server.phpファイルの名前をindex.phpに変更

ステップ2: .htaccessファイルを/publicディレクトリからルートディレクトリにコピーする

0

私はこの問題に対する最も有効な解決策を見つけました。

root フォルダーにある.htaccessを編集して次のコードを書くだけです。他に必要なものはありません

RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]

<IfModule php7_module>
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit -1
   php_value post_max_size 8M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php71"
   php_value upload_max_filesize 2M
   php_flag zlib.output_compression Off
</IfModule>
0
AKHIL RAJ