FuelPHPでurlからpublicを削除する

FuelPHP で url から public を削除する方法を紹介します。

よく見かける core 配下のファイルの編集はおこないません。

  

環境

  • FuelPHP 1.8
  • Apache 2.4

なお、今回のプロジェクトフォルダは sample-fuel-project とします。

.htaccess を作成する

プロジェクトフォルダ直下に .htaccess を作成します。

/sample-fuel-project/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^(/)?$ /sample-fuel-project/public/index.php/$1 [L]
    RewriteCond ${REQUEST_FILENAME} !-f
    RewriteCond ${REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /sample-fuel-project/public/index.php/$1 [L]
</IfModule>

RewriteRule を使用して、URLを書き換えます。
これにより、http://ドメイン/sample-fuel-project/ にアクセスしても、 public を見にいくようになります。

asset.php を作成する

/sample-fuel-project/fuel/core/config/asset.php からファイルをコピーして作成します。
core 配下のファイルを編集する記事が多いですが、app/config 配下に作成すればコアの設定を上書きしてくれるのでそちらのほうがいいです。

また、NetBeans で内部サーバを使用している場合や、Virtual Host を使用している場合には設定が逆に邪魔になるので、本番環境のみ適用したいので production 配下に asset.php を作成しました。
 
/sample-fuel-project/fuel/app/config/production/asset.php

'url' => \Config::get('base_url') . 'public/',

.htaccess の作成だけでは http://ドメイン/sample-fuel-project/ にアクセスしたとき、Assetクラスを使って読み込んだCSSファイル・画像ファイル・JSファイルの読み込みができないので、urlbase_urlpublic を連結して指定します。

上書きしない項目は必要ないので、実際 asset.php は以下の記述だけで構いません。

<?php
/**
 * Part of the Fuel framework.
 *
 * @package    Fuel
 * @version    1.8
 * @author     Fuel Development Team
 * @license    MIT License
 * @copyright  2010 - 2016 Fuel Development Team
 * @link       http://fuelphp.com
 */

/**
 * NOTICE:
 *
 * If you need to make modifications to the default configuration, copy
 * this file to your app/config folder, and make them in there.
 *
 * This will allow you to upgrade fuel without losing your custom config.
 */

return array(

    /**
     * URL to your Fuel root. Typically this will be your base URL:
     *
     * \Config::get('base_url')
     *
     * These MUST include the trailing slash ('/')
     */
    'url' => \Config::get('base_url') . 'public/',
);

config.php を作成する

config.php の設定はおこなわなくても、url から public を削除して動作させることができました。環境によって確認してください。
ただし http://ドメイン/sample-fuel-project/public にアクセスすると CSSファイル・画像ファイル・JSファイルが読み込めません。

/sample-fuel-project/fuel/app/config/config.php を確認してみます。

// 'base_url'  => null,

デフォルトだと base_url にはなにも指定されていません。
この場合、base_url は自動で設定されますが、手動で設定することもできます。

この設定も NetBeans で内部サーバを使用している場合や、Virtual Host を使用している場合には必要ないので、本番環境のみ適用したい場合は production 配下に config.php を作成します。
 
/sample-fuel-project/fuel/app/config/production/config.php

<?php
/**
 * Part of the Fuel framework.
 *
 * @package    Fuel
 * @version    1.8
 * @author     Fuel Development Team
 * @license    MIT License
 * @copyright  2010 - 2016 Fuel Development Team
 * @link       http://fuelphp.com
 */

return array(

    /**
     * base_url - The base URL of the application.
     * MUST contain a trailing slash (/)
     *
     * You can set this to a full or relative URL:
     *
     *     'base_url' => '/foo/',
     *     'base_url' => 'http://foo.com/'
     *
     * Set this to null to have it automatically detected.
     */
    'base_url'  => '/sample-fuel-project/',
);

このように指定すると、CSSの読み込みは以下のようになります。

<link type="text/css" rel="stylesheet" href="/sample-fuel-project/public/assets/css/style.css" />

指定してない場合はこんな感じです。

<link type="text/css" rel="stylesheet" href="http://ドメイン/sample-fuel-project/public/assets/css/style.css" />

productiondevelopment などの環境の切り替えはこちらを参考にしてください。

  

共有やブックマークなど