質問: http://{ドメイン}にアクセスした場合に、 自分が設定した任意の処理を実行してトップページに遷移するような.htaccessの設定を知りたいです。 ### 設計・構造 前提として以下の方法でそれぞれの処理を実行するような設計・構造になっています。 http://{ドメイン}/**{クラス名}**/**{関数名}**にアクセスした場合は app/application/controllers/**{クラス名}**.phpの**{関数名}**関数を実行する。 例) URL「http://hogehoge.com/**aaa**/**index**」にアクセスした場合、 app/application/index.phpの処理で **$_GET['url']**に設定された'**aaa/index**'という文字列を使用して app/application/controllers/**aaa**.phpの**index()**関数を実行する。 ``` (ディレクトリ構造です) root(ドキュメントルート) ├ .htaccess └ app └ application ├ index.php └ controllers ├ aaa.php ├ bbb.php └ top.php (←トップページに遷移する処理「index()関数」がある) ``` ``` (root直下の.htaccessファイルの内容です) AddType application/x-httpd-php .php .html RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ app/application/index.php?url=$1 [QSA,L] ``` ``` (app/application/index.phpの内容です) $func(); } else { // エラー処理 } } else { // エラー処理 } ``` ### 現状の動き 例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**bbb/index**' 3app/application/index.phpの処理で、app/application/controllers/**bbb**.phpの**index()**関数を実行する。 4表示URLが「http://hogehoge.com/**bbb/index**」 例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**top/index**' 3app/application/index.phpの処理で、app/application/controllers/**top**.phpの**index()**関数を実行する。 4表示URLが「http://hogehoge.com/**top/index**」 例C)「http://hogehoge.com」にアクセスした場合 1app/application/index.phpの処理が**実行されない**。 2**ステータス403が返却される。** (Forbidden You don't have permission to access / on this server.) 3表示URLが「http://hogehoge.com」 ### 理想の動き 例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**bbb/index**' 3app/application/index.phpの処理で、app/application/controllers/**bbb**.phpの**index()**関数を実行する。 4表示URLが「http://hogehoge.com/**bbb/index**」 例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**top/index**' 3app/application/index.phpの処理で、app/application/controllers/**top**.phpの**index()**関数を実行する。 4表示URLが「**http://hogehoge.com**」 例C)「http://hogehoge.com」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**top/index**' 3app/application/index.phpの処理で、app/application/controllers/**top**.phpの**index()**関数を実行する。 4表示URLが「**http://hogehoge.com**」 ### 実現したいこと 上記の「理想の動き」を実現したいです。 要するにトップページにアクセスした場合の表示URLを「**http://hogehoge.com」**にしたいです(パスを表示したくない)。 ディレクトリ構造は変えずに、「.htaccessファイル」を変えるだけで(それだけではどうしても無理であれば「app/application/index.php」を変えて)、「理想の動き」を実現したいです。 トップページには、直接トップページのhtmlファイルにアクセスするのではなく、 トップページに遷移する処理がある「app/application/controllers/top.php」のindex()関数を必ず実行して遷移したいです。 ### 試したこと .htaccessファイルを以下に編集して例A、例B、例Cを試しました ``` (root直下の.htaccessファイルの内容です) AddType application/x-httpd-php .php .html RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^$ app/application/index.php?url=top/index [QSA,L] (←追加) RewriteRule ^(.*)$ app/application/index.php?url=$1 [QSA,L] ``` 例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**bbb/index**' 3app/application/index.phpの処理で、app/application/controllers/**bbb**.phpの**index()**関数を実行する。 4表示URLが「http://hogehoge.com/**bbb/index**」 例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:'**top/index**' 3app/application/index.phpの処理で、app/application/controllers/**top**.phpの**index()**関数を実行する。 4表示URLが「**http://hogehoge.com/top/index**」 例C)「http://hogehoge.com」にアクセスした場合 1app/application/index.phpの処理を実行する。 2$_GET['url']の内容:''(**empty**) 3app/application/index.phpの処理で、app/application/controllers/**top**.phpの**index()**関数は実行されない(**$_GET['url']の内容が空であるため**)。 4表示URLが「**http://hogehoge.com**」 ### 補足情報(環境) MAMP 5.3 Apache 2.2.34(Unix) PHP 7.3.1 フレームワークは使用していません **参考にしたサイト** .htaccessでトップページのみリダイレクトさせる正しい書き方 URLを統一する方法 ~ URLを「index.htmlなし」に統一する ~ htaccess機能を使ってURLからパラメータを削除する
回答: `app/application/index.php`に意図した処理を記述するだけかと。 **追記** > > 例A)「http://hogehoge.com/bbb/index」にアクセスした場合 > > 1app/application/index.phpの処理を実行する。 > > 2$_GET['url']の内容:'bbb/index' > > 3app/application/index.phpの処理で、app/application/controllers/bbb.phpのindex()関数を実行する。 > > 4表示URLが「http://hogehoge.com/bbb/index」 > > > 色々気になる点はありますが、仕様を満たしていると判断されている かつ 本質問から離れるため言及しません。 > > 例B)「http://hogehoge.com/top/index」にアクセスした場合 > > 1app/application/index.phpの処理を実行する。 > > 2$_GET['url']の内容:'top/index' > > 3app/application/index.phpの処理で、app/application/controllers/top.phpのindex()関数を実行する。 > > 4表示URLが「http://hogehoge.com」 > > > `http://hogehoge.com/top/index`へのアクセスを、`app/application/index.php`またはその先で、`http://hogehoge.com`へリダイレクトさせてあげると良いです。 > > 例C)「http://hogehoge.com」にアクセスした場合 > > 1app/application/index.phpの処理を実行する。 > > 2$_GET['url']の内容:'top/index' > > 3app/application/index.phpの処理で、app/application/controllers/top.phpのindex()関数を実行する。 > > 4表示URLが「http://hogehoge.com」 > > > `.htaccess`へ`http://hogehoge.com`へアクセスが有った場合の処理を記述する必要があります。 `app/application/index.php`にも処理を記述する必要です。その際、ループしないように注意してください。