web-dev-qa-db-ja.com

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

どうすれば変更できますか?

79
TuGordoBello

オプション1:.htaccessを使う

まだ存在しない場合は、Laravelルートディレクトリに.htaccessファイルを作成します。 Laravelルートディレクトリに.htaccessファイルが存在しない場合は、作成します。 (通常はpublic_htmlフォルダの下にあります)

次のコードが含まれるように.htaccessファイルを編集します。

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

これで、 "/ public/index.php /"部分がなくてもWebサイトにアクセスできるはずです。

オプション2: '/ public'ディレクトリ内のものをルートディレクトリに移動する

ルートディレクトリに新しいフォルダを作成し、パブリックフォルダを除くすべてのファイルとフォルダを移動します。あなたはそれをあなたが望む何でも呼ぶことができます。 "laravel_code"を使います。

次に、すべてをパブリックディレクトリからルートフォルダに移動します。これは次のようなものになるはずです。 enter image description here

その後、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 /を削除する方法

117
Luzan Baral

私はこれをLaravel 4.2で試しました

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

うまくいくことを願っています

38
Tejas Jadhav

URLの公開を削除するための簡単な手順はこちら(Laravel 5)

1:すべてのファイルをパブリックフォルダからコピーして、それらを下位のルートフォルダに貼り付けます。

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

レベル4では、パス2は$app = require_once __DIR__.'/bootstrap/start.php';ではなく$app = require_once __DIR__.'/bootstrap/app.php';/app.phpです。

それだ。

12
Khandad Niazi

私が使っている以下のスニペットを他のオプションと混同しないでください。あなたにとっても役に立つでしょう。下の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>

その作業...

Laravel .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]
11

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)次に、ルートディレクトリ(パブリックフォルダ)の内側にあるindex.phpをあなたのURLから隠す.htaccessを作成します。

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

これはLaravelとはほとんど関係がなく、あなたのApacheの設定に関係することはほとんどないでしょう。

あなたのApacheサーバー設定にアクセスできますか?もしそうなら、ドキュメントから、これをチェックしてください:

一般的に、メインサーバーの設定ファイルにアクセスできない場合にのみ.htaccessファイルを使用してください。たとえば、ユーザー認証は常に.htaccessファイルで行われるべきだという一般的な誤解があり、最近では、mod_rewriteディレクティブが.htaccessファイルに含まれる必要があるという別の誤解があります。これは事実ではありません。ユーザ認証設定をメインサーバ設定に入れることができます。これは、実際には好ましい方法です。同様に、mod_rewriteディレクティブは多くの点でメインサーバーの設定でよりうまく機能します。

...一般的には、.htaccessファイルの使用はできるだけ避けるべきです。あなたが.htaccessファイルに入れることを考えているどんな構成も、あなたのメインサーバー構成ファイルのセクションで同じくらい効果的に作ることができます。

出典: アパッチドキュメント

私が最初にこれに言及するのは、可能であれば.htaccessを完全に取り除くことが最善であり、Directoryタグの内側にVirtualHostタグを使用することが最善の理由です。それが言われて、これの残りはあなたが何らかの理由で.htaccessルートに固執していると仮定することになるでしょう。

これを打破するために、いくつかのことが起こり得る:

  1. あなたの質問では、あなたのファイルは.htaccesという名前であることに注意してください。それはタイプミスですが、見逃していたのですが、実際には2秒目を見逃していますが、これはまさにマイナーエラーの一種です。 。

  2. サーバーは.htaccessを許可できませんでした。これを確認するには、Apacheの設定ファイルに行きます。最近のApacheビルドでは、これは通常1つの設定ファイルには含まれていないので、存在する場所にかかわらず、自分のアプリケーションを指すものを使用していることを確認してください。変化する

    AllowOverride none
    

    AllowOverride all
    

    フォローアップとして、Apacheの文書では、セキュリティ上の理由から、書き換えのために.htaccessを使用する予定がある場合は、これをすべてのフォルダーに対して実行しないことをお勧めします。代わりに、あなたが.htaccessを追加する必要があるフォルダのためにそれをしてください。

  3. mod_rewriteが有効になっていますか?それが問題を引き起こしている可能性があります。 <IfModule mod_rewrite.c>の一番上にタグがあります。それらのタグをコメントアウトして、Apacheを再起動してください。エラーが発生した場合は、おそらくmod_rewriteを有効にする必要があるためです。 Apache 2.2でmod_rewriteを有効にする方法

お役に立てれば。私は最も一般的な問題のいくつかを挙げましたが、もっと平凡または独特であるかもしれない他のいくつかがあります。開発サーバー上で別の提案? Apacheを再インストールしてください。可能であれば、良いチュートリアルを使って別のソースから実行してください。

5
smcjones

LaravelにはすでにかなりのURL .htaccessが付属しています...そのまま使用するのが良いでしょう... http://laravel.com/docs/installation#pretty-urls

Mod_rewriteが有効になっていること、およびホームパスがアプリケーションのパブリックディレクトリに設定されていることを確認してください。

1
Kisuka

Laravel 4&5:の場合

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

それでおしまい !! :)

1

それが私のためにしたようにこれが役立つことを願っています。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
0
Harry Bosh

プロジェクト用にLaravel 5をインストールしましたが、ルートにserver.phpというファイルがあります。

それをindex.phpに変更してください、そしてそれは働くか、またはターミナルでタイプします:

$cp server.php index.php
0
 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d

 RewriteRule ^(.*)$ index.php/$1 [L]

これを.htaccessで使用してサーバーを再起動します。

0
Arun

.htaccessファイルを編集した後で、Rewrite Engineがオンになっていることも確認してください。

Sudo a2enmod rewrite
0
Rafik Bari

これを行うには、以下の手順を実行する必要があります。

  • 自分のドメインを自分のプロジェクトのパブリックフォルダ(すなわち/ var/www/html/yourproject/public)にマッピングします(Linuxを使用している場合)。

  • あなたのパブリックフォルダに移動し、そこで.htaccessファイルを編集します

AddHandler application/x-httpd-php72 .php
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

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

    # Redirect non-www to www
    RewriteCond %{HTTP_Host} !^www\.
    RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

    # Redirect non-http to https
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

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

    # Remove index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
</IfModule>


  • 最後の3つのルールはhttpsなしで直接ルートにアクセスしているのであればそれを守ります。
0
Shahrukh Anwar

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

0
Rizwan Taj