1

私は codeigniter を使用しており、ポータルをもう少し SEO フレンドリーにしたいと考えています。ポータルのすべての記事を処理するコントローラー (記事) があります。URL は次のようになります。

example.com/articles/category-sub-category/article-name

mod rewrite モジュールを使用して index.php を非表示にし、codeigniter ルーティングを使用してすべての呼び出しを処理するコントローラー アクションを非表示にしています。

記事も非表示にしたいのですが、非表示にすると、すべての呼び出しが記事コントローラーに送られます。URL を次のようにしたいので、これは望ましくありません。

example.com/category-sub-category/article-name

routes.php の正規表現ルーティング ルールで試してみましたが、正しくする方法が見つかりませんでした。

4

4 に答える 4

3

CIのルーティング機能を使用すると、そのようにすべてのカテゴリにルートを設定する必要があります。

$route['category_one/:any'] = 'articles/category/category_one';
$route['category_two/:any'] = 'articles/category/category_two';
//.. and on and on until you've routed them all

categoryコントローラにメソッドを設定する必要がありますArticles。そうしないと、カテゴリごとにメソッドを作成する必要があり、手に負えなくなります。

少なくともCodeIgniterでは、そのarticles部分をURLに保持し、次のように実行する方がよいでしょう。

$route['articles/(:any)'] = 'articles/category/$1';

categoryただし、コントローラーでメソッドを作成する必要があります。

于 2010-05-14T18:47:43.043 に答える
3

私は数日前にこれにかなり広範囲に答えました:

Codeigniter プロジェクトですべてのコントローラーの配列を取得するには?

于 2010-05-16T22:05:45.897 に答える
2

わかった!問題が解決しました!

次のサイトで、問題の解決策を見つけました:http: //bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-短い/

$route['^(?!account|about|showcase|etc).*'] = "articles/read/$0";

この行は、コントローラー以外のすべてのリクエストを記事のコントローラーに返すので、必要なURLがあります:)

于 2010-05-14T22:54:42.747 に答える
0
RewriteCond %{REQUEST_URI} !^articles(?:/|$)
RewriteCond %{REQUEST_URI} !^static1(?:/|$)
RewriteCond %{REQUEST_URI} !^static2(?:/|$)
...
RewriteRule ^/(.*) /articles/$1 [QSA,NE]
于 2010-05-14T16:38:30.057 に答える