最近、個人サイトを構築する際に軽量phpフレームワークCodeIgniterを使用していました。一見すると、コードは明確かつ簡潔であり、MVC モデルは保守が非常に簡単です。開発中に使用したツールは Netbeans IDE 8.0 です。もちろん、この記事の内容は開発ツールとは関係なく、最終的な Web サイトで使用されるサーバーに大きく関係します。現在最も一般的に使用されている 2 つの無料 Web サーバーは、Apache と Nginx です (これら 2 つのサーバーの比較については、インターネット上の古典的な記事 http://zyan.cc/nginx_php_v6/ を参照してください)。私の Web サイトの開発と立ち上げ中に、両方のサーバーが若干異なる方法で CodeIgniter を使用しました。次に、他の開発者が CodeIgniter フレームワークを使用する際の落とし穴を回避できるように、それらを個別に説明します。
(1) CodeIgniterについて
CodeIgniter は、迅速な Web 開発によく使用されるオープンソースの超軽量 MVC フレームワークであり、その気になれば、自分のニーズに合わせてソース コードを自由に変更することもできます。フレームワークそのものについては紹介しませんが、CodeIgniter の公式 Web サイトにアクセスしてダウンロードすることもできます。この公式 Web サイトには、初心者にとって非常に役立つ非常に詳細な中国語のヘルプ マニュアルも用意されています。ヘルプマニュアルリンク: http://codeigniter.org.cn/user_guide/toc.html。ヘルプ マニュアルでは、簡単な Web サイトを最初から構築する方法を説明します。
(2) CodeIgniterで設定したWebサイトURL
CodeIgniter によって最初に構築された Web サイトの URL は次のようになります:
http://[Webサイトアドレス]/index.php/[コントローラークラス名]/[クラス関数名]/[関数パラメータ]
例を挙げます: http://127.0.0.1/index.php/welcome/hello/zhangsan。この例では、Web サイトの URL が 127.0.0.1 であると想定されており、これは一般的に使用されるローカル アドレスです。この URL リクエストの処理には、コントローラー フォルダー内の PHP で記述された welcome.php クラスが使用されます。これを welcome と呼びます。クラスの hello 関数にはパラメータが必要です。渡すパラメータは文字列 zhangsan です。ただし、より目を引くのは、URL に固定フィールド Index.php が含まれていることです。これは非常に不快に見えます。私が望む結果は次のとおりです: http://127.0.0.1/welcome/hello/zhangsan。では、index.php を削除するにはどうすればよいでしょうか?ここが主に共有したいところです。
index.php を削除する方法について説明する前に、まず、index.php がここに表示される理由を理解しましょう。どの URL リクエストでも、CodeIgniter はまず Web サイトとディレクトリにあるindex.php ファイルによって処理され、次にこのファイルは、指定した URL 内のindex.php の後の部分に基づいてリクエストをリダイレクトするクラスを決定します。 。したがって、URL には、index.php フィールドが含まれている必要があり、まず、index.php がこの URL を、後で処理するように指定したクラスにリダイレクトするようにサーバーに明示的に指示します。設定を行わずに直接index.phpを削除すると、Webページが表示されなくなります。したがって、これを削除したい場合は、いくつかの構成オプションを通じて、サーバーがデフォルトでindex.phpを使用してURLを処理し、URLにindex.phpを表示する必要がないようにしたいと考えています。
(3) Apacheサーバーからindex.phpを削除します
私はコンピューターで開発するときに Apache サーバーを使用するため、最初に Apache サーバーでこの問題を解決することは避けられません。実際、記事の冒頭で述べた CodeIgniter 公式ヘルプ マニュアルでは、Apache での解決策はすでに提供されていますが、Nginx での解決策は提供されていません。それもそのはず、Apacheサーバーのシェアは6割を超えていると言われており、これほど主流のサーバーとしては、公式マニュアルにその設定方法が記載されている必要があります。わかりやすくするために、さらに詳しく説明しましょう。
Web サイトのルート ディレクトリ (つまり、前述の Index.php と同じディレクトリ) に、.htaccess という名前の新しいファイルを作成します。 htaccess の前にドットがあることを忘れないように注意してください。このファイルをメモ帳で開き、次のコマンドを記述します:
リーリー英語の Rewrite を見れば、それが推測できるでしょう。実際、このファイルは URL の書き換えルールを制御します。 .htaccess ファイルの特定の書き換えルールとあらゆる種類の構文は別の主題であるため、ここでは詳しく説明しません。私たちが気にするのは、上記の文の意味だけです。
最初の文 RewriteEngine on: 翻訳すると「書き換えエンジンがオン」となり、URL 書き換えメカニズムを開始するのと同じです。
2文目 RewriteCond %{REQUEST_FILENAME} !-f: 「書き換え条件要求ファイル名はファイルではありません」と訳されます。最後の文字 f はファイルとして理解され、!-f の感嘆符は否定を意味し、ファイルではないことを意味します。
3文目 RewriteCond %{REQUEST_FILENAME} !-d: 翻訳すると「書き換え条件リクエストのファイル名はディレクトリではありません」となります。最後の文字 d はディレクトリとして理解されます。
2 番目と 3 番目の文の目的は、URL リクエストがファイル名またはフォルダー名ではない場合にのみ書き換えルールを有効にすることです。たとえば、http://127.0.0.1/test.html を考えてみましょう。このリクエストは実際には、Web サイトのルート ディレクトリで test.html を検索するもので、見つかった場合は書き換えずにこのファイルを直接返します。ルート ディレクトリで test.html が見つからない場合にのみ、URL が書き換えられます。これは REQUEST_FILENAME がファイルである例です。別の例は http://127.0.0.1/nihao です。ここで、nihao はおそらくルート ディレクトリ内のフォルダーです (もちろん、サフィックスのないファイルである可能性もあります)。ルート ディレクトリ。そうでない場合は、URL 書き換えを有効にします。これは、REQUEST_FILENAME がディレクトリである例です。
4番目の文 RewriteCond $1 !^(index.php|images|js|css|robots.txt): 翻訳すると、「条件付きURLを書き換えた後の最初のパラメータは、index.php、images、css、js、robots.txtにすることはできません」誰でも"。たとえば、http://127.0.0.1/images/girl.png の場合、この URL の最初のパラメータは、上にリストされているものでない場合にのみ書き換えないでください。この文の目的は、一部の URL リクエストの書き換えを除外することです。これは、Web サイトの CSS ファイル、JavaScript ファイル、および画像ファイルをルート ディレクトリの CSS、JS、IMAGES フォルダーに配置し、URL を通じてそれらを参照することが多いためです。 Web ページ内 これらのリソースについては、これらのリソースの要求に使用された URL も書き換えられると、Web ページ内で参照されなくなります。実際のニーズに基づいて、除外する必要がある新しい URL 書き換え状況を追加できます。
5番目の文 RewriteRule ^(.*)$ /index.php/$1 [L]: 翻訳すると、「URLの後の最初のパラメータの前にindex.phpを追加してルールを書き換えます。」 [L] は、これが最後の書き換えルールであり、これ以上はないことを示します。
このように、ブラウザに http://127.0.0.1/hello/zhangsan と入力すると、実際には http://127.0.0.1/index.php/hello/zhangsan と同等になります。
最後に小さな落とし穴があります。つまり、ツールを使用して Web サイトを開発する場合、Web サイトのコードが Apache サーバーのルート ディレクトリにないことがよくあります。たとえば、Apache サーバーのルート ディレクトリに xxx というフォルダーを作成します。ウェブサイト全体をこのフォルダに入れると、ホームページのアドレスは http://127.0.0.1/xxx/index.php になります。このとき、上記の設定ファイルの 5 番目の文を RewriteRule ^(.*) /xxx/index.php/$1 [L] に変更する必要があります。もう 1 つの変更方法は、インデックスの前のスラッシュを直接削除することです。 php の 5 番目の文 (つまり、RewriteRule ^(.*)$index.php/$1 [L]) に注意してください。
上記の .htaccess ファイルを完成させたら、あと 2 つの作業が必要です。
まず、CodeIgniter で application/config/config.php ファイルを見つけ、index_page を null 値、つまり $config['index_page'] = '"" に設定し、base_url を Web サイトのルート ディレクトリに設定します。 Index.php はディレクトリ)、$config['base_url']="http://127.0.0.1/xxx/" にあります。実サーバーにデプロイして Web サイトをオンラインにする前に、127.0.0.1 を Web サイトの URL に変更することを忘れないでください。index.php がサーバーのルート ディレクトリにある場合は、base_url の xxx を忘れずに削除してください。
次に、Apache 設定ファイル (conf/httpd.conf ファイル) を見つけて、LoadModule rewrite_module modules/mod_rewrite.so の前にある # 記号が削除されていることを確認します。次に、キーワードで htaccess を検索し、.htaccess を構成する部分を見つけます。その設定を「AllowOverride All」に変更する必要があります。実際、非常に古いバージョンの Apache を使用していない場合は、シャープ記号とAllowOverride All がデフォルトで設定されている必要があります。この手順は確認のためのもので、このように一致しない場合は、これに変更する必要があります。
この時点で、Apache サーバー下の CodeIgniter の URL 設定が完了しました。今後は、index.php を URL に含める必要がなくなり、システムはデフォルトで、index.php が最初に URL を処理するようになります。
(4) Nginxサーバーからindex.phpを削除します
上記のApacheからのindex.phpの削除については、公式ヘルプドキュメントでも簡単に説明されていますが、Nginxサーバーはそれほど幸運ではありません。 Web サイトを開発していたときは Apache をローカルで使用していましたが、Web サイトがオンラインになると、サーバーは Nginx になったので、Nginx サーバーの設定をオンラインで検索するしかありませんでした。とエラーがあったため、最終的に正しいバージョンを入手し、参照用に提供できるようになりました。私は Nginx の構成を詳しく勉強したことがないため、最初にオンライン サーバーで使用される環境について説明し、次に Nginx 構成の変更を示します。私の現在の構成では、個人的なテストでは非常にうまく機能します。同様の問題が発生した場合は、私の構成に従って試してください。ただし、お使いのシステムで動作するかどうかは保証できません。私のオンライン サーバーは私です。 XX Cloud (広告回避~) サーバーを購入しました (サーバーを一から構築するのは面倒です)。システムを構成した後は、デフォルトで Nginx になります。オペレーティングシステムはUbuntu 12.04を使用し、Nginxのバージョンはnginx/1.1.19です。
看网上好多人的Nginx服务器默认配置文件是/etc/nginx/nginx.conf,我的也不例外。不过有个注意事项,有时候nginx.conf中会有一句include ***(另外一个文件),也就是引用外边某个文件的内容作为配置文件,这时候,如果你没有在nginx.conf中找到服务器server相关配置,不妨去它include的另外一个文件中找一下,我的就是这种情况。在我的配置文件中,和服务器有关的配置应该改成如下:
<span>server { listen </span><span>80</span><span>; root </span>/usr/share/nginx/<span>www; index index.php index.html index.htm; # Make site accessible </span><span>from</span> http:<span>//</span><span>localhost/</span> <span> server_name localhost; location </span>/<span> { index index.php index.html index.htm; # Uncomment to enable naxsi on </span><span>this</span><span> location # include </span>/etc/nginx/<span>naxsi.rules # 请留意下面这条重写规则,和前面的Apache有些类似 </span><span>if</span> (!-<span>e $request_filename) { ##如果没有找到目标文件 rewrite </span>^/(.*)$ /index.php/$<span>1</span><span> last; </span><span>break</span><span>; } # 上面的重写规则也可以改成下面这种形式,亲测两者都可行 #</span><span> if</span> ($request_filename !~ (js|styles|images|robots\.txt|index\.php.*)){ ##如果不是请求js,styles等文件<br /><span> # rewrite </span>^/(.*)$ /index.php/$<span>1</span><span> last;<br /> # </span><span>break</span><span>;<br /> # } } location </span>/doc/<span> { alias </span>/usr/share/doc/<span>; autoindex on; allow </span><span>127.0</span>.<span>0.1</span><span>; deny all; } location ~ \.php($|/)</span><span> { fastcgi_split_path_info </span>^(.+\.php)(.*<span>)$; fastcgi_pass </span><span>127.0</span>.<span>0.1</span>:<span>9000</span><span>; fastcgi_index index.php; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, </span><span>if</span> Apache<span>'</span><span>s document root</span> # concurs with nginx<span>'</span><span>s one</span> <span> # location </span>~ /<span>\.ht { deny all; } }</span>
具体的改动已经标注在上面的注释中了,很简单的一句重写规则,我却折腾了蛮久的时间。希望分享出来,帮助大家少踩坑。就写到这里吧!
//use url helper
$this->load->helper('url');
current_url = current_url();
CodeIgniter 是一个轻量级的,快速的,能生成非常干净而且是对搜索引擎友好化的URL的PHPMVC框架,默认情况下,index.php 文件将被包含在你的 URL 中 例如:example.com/index.php/news/article/my_article首先确保你的Apache服务器支持支持 mod_rewrite,开启mod_rewrite需要修改httpd.conf,去掉LoadModule rewrite_module modules/mod_rewrite.so前的#你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:RewriteEngine onRewriteRule ^(.*)$ /index.php/$1 [L]如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]然后将该文件放在网站的根目录在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。注意根据你项目的位置修改文件的配置。将AllowOverride设置为none可以完全禁止使用.htaccess文件,注意将你Apache的配置文件AllowOverride设置成All