ホームページ >バックエンド開発 >PHPチュートリアル >CI フレームワークで .htaccess を使用して、URL_PHP チュートリアルでindex.php を非表示にする方法を説明します。
MVC アーキテクチャの考え方に従い、CI 内のすべてのコントローラーは、シングル ポイント エントリ ファイルindex.php (デフォルト) を介してロードされ、呼び出される必要があります。つまり、デフォルトでは、すべての CI 開発プロジェクトの URL は次の形式になります:
http://localhost/index.php/blog/logs/this_is_a_test_entry
明らかに、デフォルトでは、URL アドレスセグメントにindex.php が存在することが、URL の単純さと SEO の進行にある程度影響します。この記事で紹介した方法で、この厄介なIndex.phpを削除することができます。
CodeIgniter ユーザー マニュアルにこの問題の解決策があることにお気付きかもしれません。ただし、公式に提供されている .htaccess 構成では常に問題が解決されるわけではありません。この記事では、より完全な解決策を提供します。
注: 続行する前に、ホストが .htaccess 構成をサポートしていることを確認してください。このうち、Apache を Web サーバーとして使用する場合は、mod_rewrite モジュールのサポートを有効にする必要があります。IIS を Web サーバーとして使用する場合は、追加の ISAPI_Rewrite 拡張機能をインストールする必要があります。
具体的な方法は以下の通りです
1. 次の構成情報をコピーして .htaccess ファイルとして保存します。
以下は .htaccess ファイルの情報です
リライトベース /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule^(.*)$ /index.php?/$1 [L]
#mod_rewrite モジュールがインストールされていない場合、#この時点でプログラムは非表示が設定されていないものとして実行されます
ErrorDocument404 /index.php
2. 上記の .htaccess ファイルを CI が配置されているプロジェクトのルート ディレクトリ (つまり、index.php と同じレベルのディレクトリ) にアップロードします
3. application/config.php の次のパラメータを変更します。
トラックバック(UTF-8):http://www.cnSaturn.com/trackback/40
CodeIgniter で PATH_INFO がオンになっている場合、mod_rewrite がindex.php を隠す問題。
CodeIgniter で、URI アドレッシング モードを AUTO から PATH_INFO に変更すると、次のようになります。
この場合でも上記の .htaccess ソリューションを使用する方法、結果は次のようになります:index.php は正常に非表示になりましたが、メイン コントローラーは値を正しく取得できません。
解決策は次のとおりです。ワンステップです:
以下の書き換えルールのindex.phpの後の疑問符を削除します。
index.phpファイルを削除する方法
CodeIgniter を学習するときに多くの人が最初に実行したいと思うステップは、index.php を削除する方法であると推定されています。この公式マニュアルには、.htaccess ファイルの変更方法に関する関連チュートリアルが含まれています (サーバーが Apache である場合)。もちろん、多くの人が必要に応じて修正を加えましたが、エラーが発生しました。すべての訪問は 404 であり、この 404 は CodeIgniter の 404 エラー ページではなく、Apache の 404 ページです。
この種の問題は、Apache の書き換えルールを理解していないために発生します。
最初の行、RewriteEngine エンジンをオンに設定して URL 書き換えを有効にします。
2 行目、URL 書き換えルールを設定します、!^(index.php|images|robots.txt) この正規表現は何を示していますか?ファイルは書き換える必要はありませんが、直接アクセスされます。
3 行目の ^(.*)$ は正規表現であり、すべてのリクエストが /index.php/$1 に送信されることを意味します。つまり、バックスラッシュ (/) で始まるものはすべて相対パスです。これは誰に対する相対パスですか?ルートは URL です。
そのため、CodeIgniter が Web サイトのルート ディレクトリにインストールされていない場合、必然的にエラーが発生します。それを解決する方法は? 対応する解決策は CodeIgniter マニュアルにも記載されています:
上記の最後の文を次のように変更します:
index.php の前のスラッシュを削除するだけです。
URLサフィックスを追加する方法
上記の手順により、index.php が非表示になり、ほとんどの人がその Web サイトが CodeIgniter で開発されたのか ROR で開発されたのかが一目で分からなくなりました。
しかし、URL の後にサフィックスを追加するにはどうすればよいでしょうか? この方法で、config/config.php ファイルを変更することで、指定したファイルのサフィックスを URL に追加することもできます。たとえば、.html を追加したり、.asp、.jsp を追加したりできます。
このようにして、http://www.jb51.net/index.php/news/view/about を http://www.jb51.net/index.php/news/view/about.html に変更できます。
クエリ文字列の使用方法
通常、クエリ文字列を使用する必要はありませんが、CodeIgniter の休止モードを使用して実現できない特殊なケースが常に存在するため、URL でクエリ文字列を使用する必要があります。
CodeIgniter この機能はデフォルトではオフになっています。オンにしたい場合は、設定ファイル application/config/config.php を開くと、次の内容が表示されます。