【问题标题】:How to redirect every uri calls to one controller, except some static ones?如何将每个 uri 调用重定向到一个控制器,除了一些静态控制器?
【发布时间】:2013-08-16 19:00:42
【问题描述】:

我正在使用 codeigniter,并希望让我的门户网站对 SEO 更加友好。 我有一个控制器(文章)来处理我门户网站上的每篇文章。 网址如下所示:

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

我正在使用 mod rewrite 模块来隐藏我的 index.php,并使用 codeigniter 路由来隐藏处理每个调用的控制器操作。

我也想隐藏文章,但如果我隐藏它,每次调用都会转到文章控制器,这不是我想要的,因为我希望我的 URL 看起来像这样:

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

我已经在 routes.php 中使用正则表达式路由规则进行了尝试,但我没有找到正确的方法。

【问题讨论】:

  • 可能只有我一个人,但我不知道这些“文章”是什么,为什么要隐藏它。还有你为什么要隐藏任何东西
  • 我想隐藏它,因为我想为我的网站提供一个非常好的 seo url。 “文章”是我的控制器的名称。我通过 uri 调用它,如果我像在我的第一个示例中那样调用它,它不是我认为的最佳选择,因为它使用更多不同语言的门户,我使用不同的类别,我认为如果在每种语言中都会获得更好的排名文章操作调用不存在。 (对不起我的语言不好)

标签: php codeigniter codeigniter-routing


【解决方案1】:

【讨论】:

    【解决方案2】:

    使用 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
    

    您必须在您的 Articles 控制器中有一个 category 方法,否则您还必须为每个类别创建一个方法,这将无法控制。

    至少使用 CodeIgniter,你最好在你的 url 中保留 articles 部分并这样做:

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

    不过,您仍然需要在控制器中创建 category 方法。

    【讨论】:

    • 好的,我现在就是这样做的,但我需要一种非静态的方法来做到这一点。我很确定正则表达式还有其他方法(唯一的问题,我不知道该怎么做)。我用以下语法尝试过: $route['#[^articles]/:any#'] = "$1/$2";但它不会工作
    • 你为什么使用 $route['#[^articles]/:any#'] = "$1/$2";您不需要正则表达式开始/停止,因此 $route['articles/(:any)'] = "$1/$2"; () 表示您可以使用 $1,但您只匹配一件事,因此 $2 不起作用。
    【解决方案3】:

    好的!问题解决了!

    我在以下网站上找到了我的问题的解决方案: http://bizwidgets.biz/web-design/codeigniter-routes-trick-removing-controller-names-from-the-uri-to-keep-urls-short/

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

    这一行将每个非控制器请求返回给我的文章控制器,所以我有我想要的 url :)

    【讨论】:

    • 恭喜!但正如你所知,这里不是混蛋,但从技术上讲,每个请求都是控制器请求。您只是将所有不请求帐户、关于、展示等控制器的内容重新路由到文章控制器。
    【解决方案4】:
    RewriteCond %{REQUEST_URI} !^articles(?:/|$)
    RewriteCond %{REQUEST_URI} !^static1(?:/|$)
    RewriteCond %{REQUEST_URI} !^static2(?:/|$)
    ...
    RewriteRule ^/(.*) /articles/$1 [QSA,NE]
    

    【讨论】:

    • 这是一个好方法,但不是解决问题的codeigniter方法。这几乎是一样的,所以谢谢!
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多