1

CIを使ってブログっぽいサイトを作っています。HMVCプラグインを使用しています。私が取り組んでいるモジュールは「/journal」です。

個々の記事は/journal/ article / ID/SLUGでアクセスされます。これは正常に機能しますが、mod_rewriteを使用してURIを/ journal / ID/SLUGに短縮したいと思います。

これが私のルールです:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^journal/([0-9]+)(.*)$ index.php?/journal/article/$1$2 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1

テストには/journal/2を使用しています。

ルールが一致していることはわかっています。たとえば、リダイレクトをhttp://google.comに変更すると、実際にGoogleにリダイレクトされます。ただし、記述されたとおりにルールを使用すると、無視されているように見え、何を入力しても404が返されます。

明らかな(または不可解な)エラーを作成していますか?


編集:私は質問を投稿した直後にこれを理解しました。私のルールは確かに正しいですが、config/config.phpの次の行を変更する必要があります。

 $config['uri_protocol']    = 'AUTO';

 $config['uri_protocol']    = 'PATH_INFO';

その変更が何をするのか、なぜそれが問題を修正するのかを正確に知っているとは言いません。おそらく誰かが説明でフォローアップすることができます。

4

1 に答える 1

1

$ config ['uri_protocol']は、アプリのURIを決定するために使用する$_SERVERスーパーグローバルをCIに指示します。'PATH_INFO'オプションは、URLリクエスト(ホスト部分なし)である$_SERVER['PATH_INFO']を使用します。phpマニュアルを参照してください。

「AUTO」オプションは、構成を微調整することなく、さまざまな環境に適したCIのものです。

個人的には、いくつかのPHP SEFコントローラーを作成しましたが、すべての処理をPHPコントローラースクリプトで実行する方がよいと思います。

htaccessと書き換えはトリッキーでデバッグが難しく、1つのタイプミスでサイト全体が停止する可能性があります(痛い)。パフォーマンスはわずかに向上すると確信していますが、かなり重い要求が必要になります。とにかく、index.phpコントローラーに向かっています。すべてが1つの場所にあると、より幸せなコードが見つかります;-)

それで頑張ってください...そしてうまくいけば、私はあなたの問題にいくつかの洞察を提供しました。

于 2012-04-19T23:43:06.633 に答える