ホームページ  >  記事  >  バックエンド開発  >  CI フレームワーク .htaccess が URL 内のindex.php を隠す問題の解決策

CI フレームワーク .htaccess が URL 内のindex.php を隠す問題の解決策

WBOY
WBOYオリジナル
2016-06-23 13:57:43985ブラウズ

CodeIgniter (以下、「CI」と呼びます) は、優れた外国の PHP 軽量 MVC フレームワークであり、PHP4 と PHP5 をサポートし、高いスケーラビリティ要件を持つ小規模および中規模の Web アプリケーションを開発するための強力なツールです。これまで見てきたブログのプログラムは CI を使用して書かれています。

MVC アーキテクチャの考え方に従い、CI 内のすべてのコントローラーは、シングル ポイント エントリ ファイルindex.php (デフォルト) を介してロードされ、呼び出される必要があります。つまり、デフォルトでは、すべての CI 開発プロジェクトの URL は次の形式になります。

http://localhost/index.php/blog/logs/this_is_a_test_entry

明らかに、デフォルトでは、index が存在します。 URL アドレス部分の php は、URL の簡潔さと SEO の進行にある程度影響します。この記事で紹介した方法で、この厄介なIndex.phpを削除することができます。

CodeIgniter ユーザー マニュアルにこの問題の解決策があることに気づいたかもしれません。ただし、公式に提供されている .htaccess 構成では常に問題が解決されるわけではありません。この記事では、より完全な解決策を提供します。

注: 続行する前に、ホストが .htaccess 構成をサポートしていることを確認してください。このうち、Apache を Web サーバーとして使用する場合は、mod_rewrite モジュールのサポートを有効にする必要があります。IIS を Web サーバーとして使用する場合は、追加の ISAPI_Rewrite 拡張機能をインストールする必要があります。

具体的な方法は以下の通りです。

1. 以下の設定情報をコピーし、.htaccess ファイルとして保存します。

以下は .htaccess ファイルの情報です
1 2 3 4 5 6 7 8 9 10 11 12 13 14

RewriteEngineOn

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

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

#mod_rewrite モジュールがインストールされていない場合、404 ページすべてが #インデックスに送信されます。 php, このとき、プログラムは非表示が設定されていないものとして実行されます。 ErrorDocument404 /index.php

2. 上記の .htaccess ファイルを、CI が配置されているプロジェクトのルート ディレクトリにアップロードします (つまり、index.php と同じレベルのディレクトリ (Down)

3. application/config.php 内の次のパラメータを変更します:

1 $config['index_page'] = "index.php";

1

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

Trackback(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';

注: $_GET を渡したいため、PATH_INFO がオンになります。システムのデフォルトの POST メソッドの代わりに値を取得します。

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

解決策は次のとおりです。たった 1 ステップです:

次の書き換えルールで、index.php の後の疑問符を削除するだけです。

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

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

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

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


[その他]

ウェブサイト開発フレームワーク CodeIgniter の URL を教えてください

index.php ファイルの削除方法

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

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

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

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

最初の行では、RewriteEngine エンジンをオンに設定します。これは、URL の書き換えを有効にします。

2 行目では、 URL 書き換えルール,!^ (index.php|images|robots.txt) この正規表現は、書き換える必要はないが直接アクセスされるファイルを示します

3 行目の ^(.*)$ は正規表現です。これは、すべてのリクエストが /index.php/$1 に送信されることを意味します。URL に詳しい人なら、バックスラッシュ (/) で始まるものは相対パスであることを知っています。ルートは 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.hualai.net.cn/index.php/news/view/about を http://www.hualai.net.cn/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 を使用してページネーションを作成するときに便利です。

    $config['index_page'] = ""; //空に設定します
    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    前の記事:PHP接続エラー次の記事:PHP接続エラー