質問: CodeIgniter 3.X系でシステム構築を行おうとしています。 WordPress から移行処理を行おうとしていますが、 WordPressのURL構造がこれから開発を行っているサイトと異なるため 処理を加える必要が生じています。 たとえば、WordPressで開発したサイトが http://www.hogehoge.com/322 であった際に これを 新規開発のサイトで変換を行う必要があります。(外部リンクとして多数ありそれを大事にしたいでの) ドメイン移行後の新サイトで http://www.hogehoge.com/322 とパラメータ共通でアクセスを受けた際に http://www.hogehoge.com/detail/322 というページに飛ばしたいです。 この時 ``` $route['welcome/(:num)']='detail/$1'; ``` としましたが、 $routeの部分が処理できずに「404 Not Found」 になってしまいます。 このような操作は出来ないのでしょうか? http://www.hogehoge.com/322 というTOPページにパラメータを加えた際に http://www.hogehoge.com/detail/322 というページに飛ばす方法があればご教授頂ければと思います。 このようなことができれば非常に助かります。 ご指摘を受けて.htaccess を追記しましたが、 上手くいきません。 ``` RewriteEngine On RewriteBase / RewriteCond $1 !^(index\.php|image|images|img|css|js|robots\.txt) RewriteRule ^(.+)$ /index.php?/$1 [L] RewriteCond %{SERVER_PORT} 80 RewriteRule ^http://www.hogehoge.com/[0-9]$ http://www.hogehoge.com/detail/ ``` どこか間違っているでしょうか???????????? 詳しい方がいらっしゃったら教えてください。 宜しくお願いいたします。
回答: > > http://www.hogehoge.com/322 とパラメータ共通でアクセスを受けた際に > > http://www.hogehoge.com/detail/322 > > というページに飛ばしたいです。 > > > 飛ばしたいだけなら.htaccessにrewriteルールを書けば良いと思いますが、何かチェックしてからリダイレクトしたいってことですよね? Convert.phpにCI_Controllerを継承したConvertクラスを作ってさらにdetailメソッドを作り、 ``` $route['(:num)'] = 'convert/detail/$1' ``` とすれば期待した動作になるでしょうか? 2017/04/08 追記 ============== ルーティングについて 返答を見ている限りCodeIgniterのルーティングルールが理解できてないように思えます。 ルーティングの基本は http://example.com/[コントローラクラス]/[コントローラメソッド]/[引数] です。 この形になっていないものは 1.サブディレクトリにある 2.config/routes.phpでルーティングルールが記載されている 3.indexの省略 しかありません。 http://hogehoge.com/ まずconfig/routes.phpで設定されるデフォルトコントーラーをみに行きます。 CodeIgniterではダウンロードした直後では ``` $route['default_controller'] = 'welcome'; ``` と書かれているので Welcome.phpが無いかを探しに行っていることになります。 またメソッド名が無い場合はindexメソッドを自動的に指定します。 したがってhttp://hogehoge.com/とアクセスした時にはwelcomeコントローラのindexメソッドが呼ばれています。 まずはどのコントローラーのどのメソッドで処理をしたいのかを明確にしてください。 mod_rewriteについて ``` RewriteEngine On RewriteCond %{REQUEST_URI} !/detail RewriteRule ^(.*)$ /detail/$1 [R=301,L] ``` で http://www.hogehoge.com/322 を http://www.hogehoge.com/detail/322 に転送できます。転送だけならこれで問題ありませんが、この先でCodeIgniterを動かしたいという話であれば転送せずにルーティングだけで考えた方がシンプルです。