[解決済み] htaccessでindex.phpにリダイレクトする。
質問
私は、シンプルなPHPベースのMVC的なフレームワークを書いています。私はこのフレームワークを任意のディレクトリにインストールできるようにしたいです。
私のPHPスクリプトはリクエストURIを取得し、それをセグメントに分割します。セグメント 1 をコントローラーに、セグメント 2 をアクションにします。私がこれを行うとき、これはすべてうまくいきます。
http://www.example.com/mvc/module/test/
特定のモジュールのコントローラとメソッドに移動します。今、私はデフォルトのコントローラであるhomeコントローラを持っていて、それはhomeフォルダにあります。
さて、このフォルダに直接アクセスすると
http://www.example.com/mvc/home/
と表示されます。
403 forbidden
と表示されますが、このフォルダは存在するので、代わりに
http://www.example.com/mvc/index.php
もし、フレームワークを別のフォルダにインストールした場合、たとえば、frameworkフォルダにリダイレクトさせなければなりません。
http://www.example.com/framework/index.php
私は、すべてのフォルダとphpファイルをindex.phpにリダイレクトして、他のすべてをそのままにしておきたいと思います。
私が遭遇した最初の問題は、正しいフォルダにリダイレクトされず、常にドメインルートフォルダにリダイレクトされることでした。
これは私が試したものです。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
どのように解決するのですか?
あなたのリライトルールはほぼ大丈夫のように見えます。
まず、あなたの
.htaccess
ファイルがドキュメントルートにあることを確認します (これは
index.php
と同じ場所)でなければ、それがあるサブフォルダ(およびその中の任意のサブフォルダ - 再帰的に)にのみ影響します。
次に、ルールを少し変更して、次のようにします。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]
今のところ、あなたはただ
.
であり、これは
一つ
のインスタンスである場合、少なくとも
.*
が必要です。
は
$_GET['path']
変数には偽のディレクトリ構造が入りますので
/mvc/module/test
これを index.php で使用すると、例えば
コントローラ
と実行したいアクションを決定します。
サブディレクトリに全体をインストールしたい場合、例えば
/mvc/
または
/framework/
を使用する場合、最も簡単な方法は、それを考慮に入れてリライトルールを少し変更することです。
RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]
そして、あなたの
index.php
がそのフォルダにあることを確認し、一方
.htaccess
ファイルはドキュメントルートにあります。
に代わるものとして
$_GET['path']
(18年2月と19年1月に更新)
を設定することは、実際には必要ありません(現在では一般的でもありません)。
パス
を
$_GET
変数として使用する場合、多くのフレームワークでは
$_SERVER['REQUEST_URI']
を利用して同じ情報を取得します。
コントローラ
を決定するためですが、原理はまったく同じです。
これは
RewriteRule
を作成する必要がないため、若干簡略化されます。
パス
パラメータを作成する必要がないためです (つまり、OP のオリジナルの
RewriteRule
となります。
が動作するようになりました)。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]
しかし の場合、サブディレクトリにインストールするルールはまだ適用されます。
RewriteRule ^.*$ /mvc/index.php [L,QSA]
フラグです。
NC
= 大文字小文字を区別しない(パターンに文字がないため、特に必要ない)
L
= Last (このRewriteの後に書き換えを停止するので、書き換えのリストの最後にあることを確認する)
QSA
= Query String Append (クエリー文字列の追加)。
?like=penguins
のようなものがあった場合、それを残してindex.phpに渡します。
関連
-
[解決済み】空の配列要素を削除する
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。