URLで生成されたLaravelの「public / index.php」を削除するにはどうすればよいですか?


90

私は削除する必要がある index.phppublic/index.phpLaravelで生成されたURLから。一般的にパスは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',

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


7
LaravelのきれいなURLmod_rewriteが有効になっていることを確認してください。
クライテン2014年


@Krytenが機能しない= /
TuGordoBello 2014年

2
これは、他のソリューションが機能しない場合のソリューションですdev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts
TuGordoBello

ドキュメントのルートは目的のフォルダを指していますか?つまり/var/www/project_name/public
Kiee 2014年

回答:


129

オプション1:.htaccessを使用する

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

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

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

これで、「/ public / index.php /」の部分がなくてもWebサイトにアクセスできるようになります。

オプション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 /を削除する方法


5
Debian Linuxを使用etc/apache2/apache2.confAllowOverride NoneAllowOverride Allいる場合は、ディレクトリ設定が表示されている場所から変更することを忘れずに編集してください<Directory /var/www/></Directory>
ロビンフッド

1
ルートディレクトリに.htaccessファイルを追加するだけで機能しました。
マリオロドリゲス

8
/ rootに移動することは、本番モードではまったく良いアドバイスではありません。パブリックフォルダが存在する理由があります
toesslab 2015

書き換えルールの作業チェックを確実にするために、そのApacheの設定<Directory ...コンフィグありAllowOverride All'、このような何か: <Directory "/var/www/html/laravel/public"> Options Indexes FollowSymLinks MultiViews **AllowOverride All** </Directory>
ヤペテOngeri - inkalimeva

ホスティングでconfアクセスがない場合はどうなりますか?
ピーター

40

Laravel4.2でこれを試しました

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

私はそれがうまくいくことを願っています


1
Luazanによって受け入れられた回答が機能しない場合は、これで十分です。ただし、パブリックフォルダー内のindex.phpファイルを編集して、ユーザーがそのリンクに直接アクセスした場合に、ユーザーをパブリックからリダイレクトするようにします。
ブラッドバード

4
jsファイルとcssファイルはパブリックフォルダーからロードされなくなりました
llioor 2015

@ MaHDyfo-なぜ安全ではないのですか?そしてどうやって ?
1512 9118年

2
@ 151291なぜなら、誰もがアクセスできる.envファイルがこの方法でサイトにアクセスするからです。これを回避するためにWebサーバーを保護しない限り。
Mahdyfo

17

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

すばらしい:この方法の長所と短所を教えてください。
Muhammad Ateek 2016

ルート(最初のスニペット)で.htaccessを編集しただけで、修正されました。ありがとうございます。
peird

13

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$app = require_once __DIR__.'/bootstrap/start.php';では、パス2は代わりに$app = require_once __DIR__.'/bootstrap/app.php';/app.php

それだ。


サイトからの他のリンクに関して他に何か問題はありますか?
Haring10 2015

それは素晴らしい解決策のように見え、また単純です。しかし、実際には、Haring10が言ったように。これに問題はありますか?
ピーター

10

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]

1
あなたのステップを試しました。まだ結果が出ていません!なぜこれが起こっているのかわかりません!
Mostafiz Rahman 2014

根本原因を追跡できるようにログ情報を提供します
Orchid

完全なログファイルは次のとおり
s

私のために働いた。仮想ホストをパブリックフォルダーに直接移動させないでください。
cardi777 2015年

ありがとうございました。これは私のために働いた、私のmod_rewrite障害者。
Maubeh 2016

5

これはおそらくLaravelとはほとんど関係がなく、Apacheの設定とはすべて関係があります。

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

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

...一般に、.htaccessファイルの使用は可能な限り避ける必要があります。.htaccessファイルに入れることを検討する構成は、メインサーバー構成ファイルのセクションでも同様に効果的に行うことができます。

出典:Apacheドキュメント

私がこれを最初に言及する理由.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_rewriteApache2.2のmod_rewriteを有効にする方法

お役に立てれば。最も一般的な問題のいくつかに名前を付けましたが、もっと平凡またはユニークな問題がいくつかあります。開発サーバーに関する別の提案はありますか?Apacheを再インストールします。可能であれば、別のソースから適切なチュートリアルを使用して実行してください。


apache2構成設定の大きなキャッチ、私は毎回この設定を逃します。
アビシェーク

4

Laravel 4&5の場合:

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

それでおしまい !!:)



1

LaravelにはすでにきれいなURL.htaccessが付属しています...箱から出してすぐに使えるはずです... http://laravel.com/docs/installation#pretty-urls

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


私はアクティベートしmod_rewrite、そのページにあり、まだ機能しないコードをコピーしました
TuGordoBello 2014年

1
Apacheで、パスがアプリケーションのパブリックフォルダーに設定されていることを確認してください。
Kisuka 2014年

ServerAdmin webmaster@localhost DocumentRoot /home/web-apps/myproject/public
tuGordoBello 2014年

mod_rewriteを有効にした後、Apacheを再起動しましたか?
Kisuka 2014年

user写真を保存する場所と呼ばれるフォルダがあります。また、と呼ばれるブレードファイルuserがあります。URLに書き込むmyproject.com/userと、フォルダの内容が表示されます。写真
TuGordoBello 2014年

1

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

  • ドメインをプロジェクトのパブリックフォルダー(つまり、/ 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
 RewriteEngine on

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

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

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


0

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

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

0

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

に変更するindex.phpと、機能するか、ターミナルに入力します。

$cp server.php index.php

0

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



0

IIS Windows Serverを使用する場合はweb.config、ルートフォルダーにファイルを追加し、次のコードを入力します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{URL}" pattern="^system.*" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="/index.php/{R:1}" />
                </rule>
                <rule name="Imported Rule 2" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                        <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

使用する.htaccess 場合はこれを使用してください:

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


-3

あたりとしてLaravel 5.3以上のものが正常に動作しますが、冷静なると手順の下に従ってくださいません。

ステップ1.laravelプロジェクトの内部に移動します
ステップ2.ランダムなディレクトリ/フォルダーを1つ作成します。laravelcodeの
ステップ3.移動し、すべてのフォルダと(場合を除き、ファイルのパブリックフォルダ)
、ステップ4に移動全ての内側にあるフォルダやファイルの公共laravelプロジェクトにフォルダ
のindex.phpファイルがあるlaravelプロジェクト内部の今ステップ5は、してくださいそれを開き、以前のように新しいパスに従ってブートストラップのフォルダーパスを変更します。「requireDIR。 '/ .. / bootstrap /autoload.php';」今では「DIRが必要」になります。 '/ laravelcode / bootstrap /autoload.php';」になります。

http:// localhost / blog /のように、publicとindex.phpを使用せずにURLを実行するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.