Webサーバーの構成方法については、Symfony 4のドキュメントに従っています。
https://symfony.com/doc/current/setup/web_server_configuration.html
Apache 2.4構成の.confファイルは、ドキュメントに記載されているとおりです。ここにその一部をコピーしています:
<Directory /var/www/project/public>
AllowOverride None
Require all granted
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
</Directory>
プラットフォームに移動すると、すべてが正常に機能しますが、ページに移動するとすぐに404エラーが表示されます。 URLにindex.phpを追加すると、正常に動作します。何が起こっているのか理解してくれませんか。
例:私がいるとき http://myplatform.com/
このページでメールアドレスを保存できます。 http://myplatform.com/index.php/saveEmail にアクセスすると機能しますが、私のページから、リンクによって http://myplatform.com/saveEmailにリダイレクトされます そしてそれは動作しません。
http://myplatform.com/index.php に移動すると、すべて正常に動作します。
URLからindex.phpを削除するにはどうすればよいですか?
ありがとう!
私はsymfonyについて知りません。しかし、それはすべてのApache2とphpプロジェクトで動作するはずです。
まず、次の2つのことを行う必要があります。
PHPリライトモジュールが有効になっているかどうかを確認する必要があります。あなたはphpinfo()
でそれを行うことができます。これをファイルinfo.php
に書き込んで、ブラウザで開きます: http://localhost/info.php
次に、mod_rewrite
を検索します。このページにmod_rewrite
と表示されている場合、mod_rewrite
が有効になっています。
mod_rewrite
が有効になっていない場合は、有効にします。次のコマンドを使用して、AbuntuのUbuntu 18.04で有効にしました:$ Sudo a2enmod rewrite
。次に、Apache2を再起動します$ systemctl restart Apache2
mod_rewrite
が有効になっている場合、他の構成が機能します。次に、AllowOverride All
ファイルに.conf
を追加します。
<Directory /var/www/project/public>
AllowOverride All
</Directory>
次に、.htaccess
ファイルをプロジェクトのルートディレクトリに追加します。
<IfModule mod_rewrite.c>
RewriteEngine On
# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
注:.htaccess
ファイルを/var/www/project/.htaccess
または/var/www/project/public/.htaccess
に追加してみてください。何がうまくいくかわかりません。
このApache構成には、すべてのリクエストに対するindex.phpへのリダイレクトが含まれていません。 2つの選択肢があります。
•同じページで、この文の後にこのリダイレクトを含む構成があります。「次の最適化された構成を使用して、.htaccessサポートを無効にし、Webサーバーのパフォーマンスを向上させます:」
•.htaccessを使用してこのリダイレクトを処理する場合は、composer require Apache-pack
を実行するだけです。このコマンドは、.htaccessをパブリックディレクトリにインストールします。
この方法で変更すると、おそらく機能しますが、
AllowOverride All
Order Allow,Deny
問題が見つかりました。 <Directory /var/www/project/public>
が間違ったディレクトリを指しています。