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()**関数を実行する。
Directory
1(ディレクトリ構造です) 2 3root(ドキュメントルート) 4 ├ .htaccess 5 └ app 6 └ application 7 ├ index.php 8 └ controllers 9 ├ aaa.php 10 ├ bbb.php 11 └ top.php (←トップページに遷移する処理「index()関数」がある)
htaccess
1(root直下の.htaccessファイルの内容です) 2 3AddType application/x-httpd-php .php .html 4 5<IfModule mod_rewrite.c> 6 RewriteEngine On 7 RewriteBase / 8 RewriteCond %{REQUEST_FILENAME} !-d 9 RewriteCond %{REQUEST_FILENAME} !-f 10 RewriteRule ^(.*)$ app/application/index.php?url=$1 [QSA,L] 11</IfModule>
PHP
1(app/application/index.phpの内容です) 2 3<?php 4set_include_path('{パス}'); 5require_once('app/vendor/autoload.php'); 6 7$url = explode('/', filter_input(INPUT_GET, 'url')); 8$class = array_shift($url); 9$func = array_shift($url); 10 11if(file_exists('controllers/'.$class.'.php')) { 12 $class = 'Controllers\'.$class; 13 $controller = new $class(); 14 if (method_exists($controller, $func)) { 15 $controller->$func(); 16 } else { 17 // エラー処理 18 } 19} else { 20 // エラー処理 21}
現状の動き
例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'bbb/index'
③app/application/index.phpの処理で、app/application/controllers/bbb.phpの**index()**関数を実行する。
④表示URLが「http://hogehoge.com/**bbb/index**」
例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'top/index'
③app/application/index.phpの処理で、app/application/controllers/top.phpの**index()**関数を実行する。
④表示URLが「http://hogehoge.com/**top/index**」
例C)「http://hogehoge.com」にアクセスした場合
①app/application/index.phpの処理が実行されない。
②ステータス403が返却される。
(Forbidden You don't have permission to access / on this server.)
③表示URLが「http://hogehoge.com」
理想の動き
例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'bbb/index'
③app/application/index.phpの処理で、app/application/controllers/bbb.phpの**index()**関数を実行する。
④表示URLが「http://hogehoge.com/**bbb/index**」
例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'top/index'
③app/application/index.phpの処理で、app/application/controllers/top.phpの**index()**関数を実行する。
④表示URLが「**http://hogehoge.com**」
例C)「http://hogehoge.com」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'top/index'
③app/application/index.phpの処理で、app/application/controllers/top.phpの**index()**関数を実行する。
④表示URLが「**http://hogehoge.com**」
実現したいこと
上記の「理想の動き」を実現したいです。
要するにトップページにアクセスした場合の表示URLを「**http://hogehoge.com」**にしたいです(パスを表示したくない)。
ディレクトリ構造は変えずに、「.htaccessファイル」を変えるだけで(それだけではどうしても無理であれば「app/application/index.php」を変えて)、「理想の動き」を実現したいです。
トップページには、直接トップページのhtmlファイルにアクセスするのではなく、
トップページに遷移する処理がある「app/application/controllers/top.php」のindex()関数を必ず実行して遷移したいです。
試したこと
.htaccessファイルを以下に編集して例A、例B、例Cを試しました
htaccess
1(root直下の.htaccessファイルの内容です) 2 3AddType application/x-httpd-php .php .html 4 5<IfModule mod_rewrite.c> 6 RewriteEngine On 7 RewriteBase / 8 RewriteCond %{REQUEST_FILENAME} !-d 9 RewriteCond %{REQUEST_FILENAME} !-f 10 RewriteRule ^$ app/application/index.php?url=top/index [QSA,L] (←追加) 11 RewriteRule ^(.*)$ app/application/index.php?url=$1 [QSA,L] 12</IfModule>
例A)「http://hogehoge.com/**bbb**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'bbb/index'
③app/application/index.phpの処理で、app/application/controllers/bbb.phpの**index()**関数を実行する。
④表示URLが「http://hogehoge.com/**bbb/index**」
例B)「http://hogehoge.com/**top**/**index**」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:'top/index'
③app/application/index.phpの処理で、app/application/controllers/top.phpの**index()**関数を実行する。
④表示URLが「**http://hogehoge.com/top/index**」
例C)「http://hogehoge.com」にアクセスした場合
①app/application/index.phpの処理を実行する。
②$_GET['url']の内容:''(empty)
③app/application/index.phpの処理で、app/application/controllers/top.phpのindex()関数は実行されない($_GET['url']の内容が空であるため)。
④表示URLが「**http://hogehoge.com**」
補足情報(環境)
MAMP 5.3
Apache 2.2.34(Unix)
PHP 7.3.1
フレームワークは使用していません
参考にしたサイト
.htaccessでトップページのみリダイレクトさせる正しい書き方
URLを統一する方法 ~ URLを「index.htmlなし」に統一する ~
htaccess機能を使ってURLからパラメータを削除する
回答1件
あなたの回答
tips
プレビュー