はじめに
Magentoで開発・構築を進めていると、商品ページやカテゴリページのURLに
以下のように index.php が含まれてしまうケースがあります。
これはSEO的にも見た目的にも避けたいですよね。
なので今回は、MagentoのURLから index.php を消す方法をまとめてみました。
index.php が含まれる原因
Magentoでは、サーバーのURL Rewrite設定(mod_rewrite等)が正しく構成されていない場合、index.php をURLに含めた状態でページが表示されます。
この状態は一時的な仮設定のようなもので、以下の方法によりRewrite機能を有効にすることで非表示にすることが可能です。
URLから index.php を消す方法
1)Magentoの設定確認
管理画面の下記の設定を確認します。
[ Stores > Configuration > Web > Search Engine Optimization ]
→ Use Web Server Rewrites:Yes に設定
2)Apache(mod_rewrite)を有効化
Apacheを使用している場合は、URL Rewriteを処理するモジュールを有効にします。
まずは rewrite_moduleが読み込まれているか確認します。
$ httpd -M | grep 'rewrite'
rewrite_module (shared)
rewrite_module (shared) が表示されない場合は、以下のようにRewriteモジュールを有効化します。
$ a2enmod rewrite
$ systemctl restart apache2
3).htaccessの確認
Magentoのルートディレクトリには、初期状態で .htaccess ファイルが存在します。
以下のような記述があることを確認してください。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
</IfModule>
4)キャッシュのクリア
設定変更後は、Magentoのキャッシュを必ず削除します。
$ php bin/magento cache:flush
以上より、例えば
https://example.com/index.php/product-name
が
https://example.com/product-name
でアクセスできるようになるのですっきりしますね。
但し、環境ごとに挙動が異なるケースもあるため、本番環境に適用する際は事前にステージングでの動作確認するなどの対応をおすすめします。