web-dev-qa-db-ja.com

Laravel 5はApache仮想ホストを使用してindex.phpを必要とします

ルート以外のページを読み込むと、ルートの前にindex.phpがないとページが読み込まれません。私が得るエラー:

 Not Found

 The requested URL /login was not found on this server.

 Apache/2.4.7 (Ubuntu) Server at mydomain.com Port 80

まず、次のものを含む仮想ホストファイルがあります。

//also tried adding DirectoryIndex here before <directory>
<directory /var/www/mydomain.com>
    DirectoryIndex index.php
    AllowOverride ALL
</directory>

と私の公共の.htaccesと:

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

同じサーバー上に同じ.htaccessとappache configを持つ別のドメインがあり、正常に動作します。また、Apacheを再起動しました。 index.php/routeページでphpinfoを使用すると、Loaded Modulesに表示されます。

mod_rewrite mod_setenvif 

Xamppを使用してWebサイトをローカルで実行すると、すべてが正常に機能します。何時間も試してみましたが、修正もエラーも(ログが空です)またはまだ試していない解決策を見つけることができません。

編集:

デジタルオーシャンVPSでUbuntu Ubuntu 14.04 x64を使用しています。そして、(提案されたように)再びオンとオフを切り替えてみました。 PHPバージョン5.5.9-1ubuntu4.9。私は this チュートリアルに従ってすべてを設定しました(ディレクトリ部分を除く)。Apacheログの場所とファイルerror.logは指定されたディレクトリに作成されますが、エラーはありません。

私の現在のappacheの構成は次のとおりです。this (ドメイン名がある白い部分をトリプルチェックしました)。

Apache2ctl -t D DUMP_VHOSTSを実行すると、

enter image description here

これは私にはうまく見えますが、デフォルトの設定を無効にしようとしましたが、助けにはなりませんでした。

注:実際には実際のドメインをmydomain.comに置き換えましたが、実際にはこれらのスポットで実際のドメインを使用しています。

Thoughtconfファイルのim編集がドメインで使用されていることをどのようにして確認できますか?

24

Confファイル全体を削除し、動作しているものから再びコピーしました。デフォルトの.htaccessをlaravelから取得し、機能しました。残念ながら、何が間違っているのかまだわかりません。現在のconfファイルは次のようになります。

<Directory /var/www/mydomain.com>
    AllowOverride ALL
    DirectoryIndex index.php
</Directory>

/ publicにある.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]
</IfModule>

これは 正しい Laravel 5の代替htaccessルールは、デフォルトが機能しない場合に使用することをお勧めします。

Options +FollowSymLinks
RewriteEngine On

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

Options +FollowSymLinksDirectotyIndexはシンボリックリンクのように機能するため、重要な役割を果たすと思います。

また、/ app/config/app.phpをチェックして、index.phpを含むようにConfig( 'app.url')を設定していないことを確認してください。

laravel=がサブディレクトリにインストールされている場合、これを参照してください: url生成されたlaravelから "public/index.php"を削除するにはどうすればよいですか?

12
Neo

すべてオフ(シャットダウン)にしてから、再びオンにしてみましたか?

すべてがあなたの言う通りなら、それはうまくいくはずです。再起動を試みて、何か変更されるかどうかを確認します。

そうでない場合は、使用しているOSで更新してください。

8
CenterOrbit

今日、私はほぼ同じ問題を抱えていましたが、@ dasperも助けてくれました。 Digital Ocean Ubuntu 14.04も使用しています。コマンドa2enmod rewriteを実行してから、Apache2をリロードする必要がありました。 appearedをオンに書き換えても、実際にはそうではなかったようです。

4
Ben Harvey

問題は、仮想ホスト構成および/または置き忘れた。htaccessファイルにある可能性があります。

。htaccessファイルがpublic /フォルダーにあり、DocumentRootがそのpublic /フォルダーに設定されていることを確認してください。

また、<Directory>ディレクティブは仮想ホストを制御するのではなく、フォルダー自体とサーバー上でのアクセス方法(またはアクセス不可)を制御します。仮想ホストの構成を変更するには、<VirtualHost>ディレクティブ内で変更します。

仮想ホスト構成の例を次に示します。

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot "/var/www/mydomain.com/public"
    DirectoryIndex index.php
</VirtualHost>

デフォルトLaravel Apache config:

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

そして、ここに代替があります:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
3
user2479930

まず、mode_rewriteが有効になっていることを確認します。おそらくこれを行ったと思いますが、何も見逃していないことを確認したいと思います。

次に、構文が2.2と2.4の間で変更されたため、実行しているApacheのバージョンを確認します。これは大したことではないはずであり、これが犯人であることを非常に疑いますが、将来のトラブルを救うことができます

次に、htaccessファイルではなく、vhost情報内に書き換え条件を入れてみてください。これにより、パフォーマンスが少し向上するだけでなく、htaccessエラーがスケルチされる可能性のあるApacheを再起動するときにコンソールに警告/エラーが表示されます。

<directory /var/www/mydomain.com>
    Options -MultiViews
    AllowOverride ALL
    RewriteEngine On

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

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</directory>

このポイントを超えると、サーバーからのログや情報が失われ、途方に暮れます。 CustomLogをvhostに追加して、サーバーによって処理されたすべてのリクエストをレポートすることもできます。

3
dasper

もう1つの注意:/etc/hostsを編集し、127.0.0.2 yourdomain.comを追加することを忘れないでください

2
vivoconunxino

Laravelルートフォルダーのserver.phpの名前をindex.phpに変更し、/ publicディレクトリーから.htaccessファイルをLaravel=ルートフォルダーにコピーしてください。 。

解決策が見つかりました こちら

2
Alex Kyriakidis

ディレクトリパスが間違っていると思います。 LaravelはそのディレクトリをWebルートとして扱うため、最後に/publicが必要です。これを試してください:

<directory /var/www/mydomain.com/public>
    DirectoryIndex index.php
    AllowOverride ALL
</directory>

しかし、より良い解決策は、.htaccessファイルのコンテンツを仮想ホストに配置することです。このような:

<VirtualHost *:80>
    DocumentRoot "/var/www/mydomain.com/public"
    ServerName mydomain.com
    ServerAlias *.mydomain.com

    <Directory "/var/www/mydomain.com/public">
        # Ignore the .htaccess file in this directory
        AllowOverride None

        # Make pretty URLs
        <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]
        </IfModule>
    </Directory>
</VirtualHost>

また、以下を実行して、構成ファイルがロードされていることを確認する必要があります。

Apache2ctl -t -D DUMP_VHOSTS

これにより、ロードされたすべての仮想ホストのリストが出力されます。あなたのリストがそのリストにない場合は、次を実行して有効にしてください:

a2ensite [name_of_your_config_file]

次に、Apacheを再起動します。

service Apache2 reload

2
BrokenBinary