ホームページ >バックエンド開発 >PHPチュートリアル >CI フレームワークで .htaccess を使用して、URL_PHP チュートリアルでindex.php を非表示にする方法を説明します。

CI フレームワークで .htaccess を使用して、URL_PHP チュートリアルでindex.php を非表示にする方法を説明します。

WBOY
WBOYオリジナル
2016-07-13 10:28:45833ブラウズ

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 ファイルの情報です

コードをコピーします コードは次のとおりです:

RewriteEngineOn

リライトベース /

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 の次のパラメータを変更します。

コードをコピーします コードは次のとおりです:
$config['index_page'] = "index.php";

コードをコピーします コードは次のとおりです:
$config['index_page'] = "" //空に設定します

; 上記の3つのステップは必須です。すべてが正常に構成されている場合、プログラムを再度実行すると、プログラムが自動的にindex.php URLセグメントを非表示にしていることがわかります。

トラックバック(UTF-8):http://www.cnSaturn.com/trackback/40

CodeIgniter で PATH_INFO がオンになっている場合、mod_rewrite がindex.php を隠す問題。

CodeIgniter で、URI アドレッシング モードを AUTO から PATH_INFO に変更すると、次のようになります。

コードをコピーします コードは次のとおりです:
$config['uri_protocol'] = 'PATH_INFO';

注: システムのデフォルトの POST メソッドではなく $_GET を通じて値を取得したいため、PATH_INFO がオンになっています。

この場合でも上記の .htaccess ソリューションを使用する方法、結果は次のようになります:index.php は正常に非表示になりましたが、メイン コントローラーは値を正しく取得できません。

解決策は次のとおりです。ワンステップです:

以下の書き換えルールのindex.phpの後の疑問符を削除します。

コードをコピーします コードは次のとおりです:
RewriteRule^(.*)$ /index.php?/$1[L]

変更されたルールは次のとおりです:

コードをコピーします コードは次のとおりです:
RewriteRule^(.*)$ /index.php/$1 [L]

その他の場所は変更ありません。

index.phpファイルを削除する方法

CodeIgniter を学習するときに多くの人が最初に実行したいと思うステップは、index.php を削除する方法であると推定されています。この公式マニュアルには、.htaccess ファイルの変更方法に関する関連チュートリアルが含まれています (サーバーが Apache である場合)。

コードをコピーします コードは次のとおりです:
RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

もちろん、多くの人が必要に応じて修正を加えましたが、エラーが発生しました。すべての訪問は 404 であり、この 404 は CodeIgniter の 404 エラー ページではなく、Apache の 404 ページです。

この種の問題は、Apache の書き換えルールを理解していないために発生します。

最初の行、RewriteEngine エンジンをオンに設定して URL 書き換えを有効にします。
2 行目、URL 書き換えルールを設定します、!^(index.php|images|robots.txt) この正規表現は何を示していますか?ファイルは書き換える必要はありませんが、直接アクセスされます。
3 行目の ^(.*)$ は正規表現であり、すべてのリクエストが /index.php/$1 に送信されることを意味します。つまり、バックスラッシュ (/) で始まるものはすべて相対パスです。これは誰に対する相対パスですか?ルートは URL です。

そのため、CodeIgniter が Web サイトのルート ディレクトリにインストールされていない場合、必然的にエラーが発生します。それを解決する方法は? 対応する解決策は CodeIgniter マニュアルにも記載されています:

上記の最後の文を次のように変更します:

コードをコピーします コードは次のとおりです:

RewriteRule ^(.*)$index.php/$1 [L]

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 でクエリ文字列を使用する必要があります。

コードをコピーします コードは次のとおりです:

index.php?c=products&m=view&id=345

CodeIgniter この機能はデフォルトではオフになっています。オンにしたい場合は、設定ファイル application/config/config.php を開くと、次の内容が表示されます。

コードをコピーします コードは次のとおりです:
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c' //コントローラー名
$config['; function_trigger'] = 'm'; //メソッド名
$config['directory_trigger']='d' //コントローラーが配置されているサブディレクトリの名前

; enable_query_strings を TRUE に変更すると、この機能が有効になります。この時点で、キーワードを使用して必要なコントローラーとメソッドを呼び出すことができます:

コードをコピーします コードは次のとおりです:
Index.php?c=controller&m=method

これは、CodeIgniter を使用してページネーションを作成するときに便利です。

http://www.bkjia.com/PHPjc/781032.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/781032.html技術記事 MVC アーキテクチャの考え方に従い、CI 内のすべてのコントローラーはシングルポイント エントリ ファイルindex.php (デフォルト) を介してロードされ、呼び出される必要があります。つまり、デフォルトでは、すべての CI 開発プロジェクト...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。