CodeIgniter 1.7 を使用して約 6 年間クライアント Web サイトを運営してきましたが、問題はありません。しかし、最近 CodeIgniter フレームワークを 2.1.1 に更新したところ、.htaccess に問題が発生しています。コントローラーに到達していないことをログで確認したので、これは純粋に .htaccess の問題であると考えています。
いくつかの典型的な URL パターンがあります。
mysite.com/<page name here>, i.e. mysite.com/faq
mysite.com/admin/<action here>, i.e. mysite.com/admin/login
私.htaccess
は現在:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/page/id/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(admin/*)$ index.php/$1 [L]
明らかなように、mysite.com/faq
に書き換える必要がありますがmysite.com/page/id/faq
、代わりに 404 をスローしています。
mysite.com
デフォルトのコントローラー、この場合はホームページまたは と同等のものを正常にロードするだけですmysite.com/home
。すべての管理 URL が完全に機能しています。mysite.com/page/id/<page name here>
も完全に機能しています。
比較のために、.htaccess
CodeIgniter をアップグレードするまで 6 年間正常に動作していたオリジナルは次のとおりです。
RewriteRule ^((images|styles|scripts|documents)/*.*)$ $1 [L]
RewriteRule ^(admin/*)$ index.php/$1 [L]
RewriteRule ^([a-zA-Z0-9]+)$ page/id/$1
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ index.php/$1 [L]
このオリジナルのものは、現在上で使用しようとしているものとまったく同じ動作をします。元の書き換えログは次のとおりです。
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'faq'
[rid#1db5120/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/faq' pattern='^system.*' => not-matched
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'faq'
[rid#1db5120/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/faq' pattern='^application.*' => not-matched
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^((images|styles|scripts|documents)/*.*)$' to uri 'faq'
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(admin/*)$' to uri 'faq'
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^([a-zA-Z0-9]+)$' to uri 'faq'
[rid#1db5120/initial] (2) [perdir C:/wamp/www/jb2/] rewrite 'faq' -> 'page/id/faq'
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] add per-dir prefix: page/id/faq -> C:/wamp/www/jb2/page/id/faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/page/id/faq -> page/id/faq
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'page/id/faq'
[rid#1db5120/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='page/id/faq' pattern='!^(index\.php|robots\.txt|favicon\.ico)' => matched
[rid#1db5120/initial] (2) [perdir C:/wamp/www/jb2/] rewrite 'page/id/faq' -> 'index.php/page/id/faq'
[rid#1db5120/initial] (3) [perdir C:/wamp/www/jb2/] add per-dir prefix: index.php/page/id/faq -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#1db5120/initial] (2) [perdir C:/wamp/www/jb2/] strip document_root prefix: C:/wamp/www/jb2/index.php/page/id/faq -> /jb2/index.php/page/id/faq
[rid#1db5120/initial] (1) [perdir C:/wamp/www/jb2/] internal redirect with /jb2/index.php/page/id/faq [INTERNAL REDIRECT]
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/index.php/page/id/faq' pattern='^system.*' => not-matched
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/index.php/page/id/faq' pattern='^application.*' => not-matched
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^((images|styles|scripts|documents)/*.*)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(admin/*)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^([a-zA-Z0-9]+)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#4f657d8/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#4f657d8/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='index.php/page/id/faq' pattern='!^(index\.php|robots\.txt|favicon\.ico)' => not-matched
[rid#4f657d8/initial/redir#1] (1) [perdir C:/wamp/www/jb2/] pass through C:/wamp/www/jb2/index.php
.htaccess
私が試してきた現在の書き換えログは次のとおりです。
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'faq'
[rid#4fb2e70/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/faq' pattern='^system.*' => not-matched
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'faq'
[rid#4fb2e70/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/faq' pattern='^application.*' => not-matched
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/faq -> faq
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'faq'
[rid#4fb2e70/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='C:/wamp/www/jb2/faq' pattern='!-f' => matched
[rid#4fb2e70/initial] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='C:/wamp/www/jb2/faq' pattern='!-d' => matched
[rid#4fb2e70/initial] (2) [perdir C:/wamp/www/jb2/] rewrite 'faq' -> 'index.php/page/id/faq'
[rid#4fb2e70/initial] (3) [perdir C:/wamp/www/jb2/] add per-dir prefix: index.php/page/id/faq -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#4fb2e70/initial] (2) [perdir C:/wamp/www/jb2/] strip document_root prefix: C:/wamp/www/jb2/index.php/page/id/faq -> /jb2/index.php/page/id/faq
[rid#4fb2e70/initial] (1) [perdir C:/wamp/www/jb2/] internal redirect with /jb2/index.php/page/id/faq [INTERNAL REDIRECT]
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#1da50a0/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/index.php/page/id/faq' pattern='^system.*' => not-matched
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#1da50a0/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='/jb2/index.php/page/id/faq' pattern='^application.*' => not-matched
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(.*)$' to uri 'index.php/page/id/faq'
[rid#1da50a0/initial/redir#1] (4) [perdir C:/wamp/www/jb2/] RewriteCond: input='C:/wamp/www/jb2/index.php' pattern='!-f' => not-matched
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] add path info postfix: C:/wamp/www/jb2/index.php -> C:/wamp/www/jb2/index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] strip per-dir prefix: C:/wamp/www/jb2/index.php/page/id/faq -> index.php/page/id/faq
[rid#1da50a0/initial/redir#1] (3) [perdir C:/wamp/www/jb2/] applying pattern '^(admin/*)$' to uri 'index.php/page/id/faq'
[rid#1da50a0/initial/redir#1] (1) [perdir C:/wamp/www/jb2/] pass through C:/wamp/www/jb2/index.php
実際のアップグレード プロセスは、CodeIgniter フレームワーク上でのみ実行され、ファイルを別application
のsystem
フォルダーに再編成しました。アップグレード プロセスの一部として必要な最小限の変更を除いて、実際のカスタム コードは一切変更されていません。
これを機能させるために、約 10 億の異なる.htaccess
コマンド コンボを試しましたが、「通常の」ページと管理ページの両方を同じ構成で正しくロードすることはできません。最終的に私の質問は、なぜ CodeIgniter をアップグレードすると URL の書き換えが魔法のように壊れたのかということです。
誰にも提案はありますか?私はこれに別の目を向けたいと思います。