【问题标题】:Hiding default controller name in PHP CodeIgniter URLs在 PHP CodeIgniter URL 中隐藏默认控制器名称
【发布时间】:2011-09-08 17:10:26
【问题描述】:

我正在尝试使用 htaccess 从 CodeIgniter 中的 URL 中删除默认控制器名称;我隐藏了 index.php,但也想摆脱当前称为 con_index 的默认控制器。

例如,如果站点根目录是 mysite.com, mysite.com/con_index/function1 将更改为 mysite.com/function1 等等。

所有其他控制器都可以保留在 url 中,所以如果我有另一个名为 location 的控制器,其函数名为 location1,mysite.com/locations/location1 将保持不变。

我认为这会形成一个更传统的结构,而不是在您离开站点根目录的那一刻弹出一个类和函数名称。咬牙切齿想实现这一点,有人可以帮忙吗?

【问题讨论】:

  • 你不能只创建一个名为“function1”的控制器,然后将“con_index”控制器只留给你的主页吗?

标签: php .htaccess url codeigniter mod-rewrite


【解决方案1】:

在你的 .htaccess 中试试这个:

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^(.*)\/$ index.php/com_index/$1 [nc] [L]

这会将括号内的所有匹配项替换为$1。因此,当您调用 www.example.com/function_1/ 时,它实际上调用了 www.example.com/com_index/function_1

但是,我不确定它是否适用于 CI,因为 CI 可能对访问 URL 路由有一些限制。

【讨论】:

    【解决方案2】:

    您是否尝试过使用

    $route['default_controller'] = 'con_index'
    

    CodeIgniter Default Controller

    【讨论】:

    • 是的,它已经在那里了。我不希望它出现在 URL 字符串中。
    • 这是一个想法,但不确定它是否有效。转到:application/config/routes.php 并添加:$route['/(:any)'] = "con_index/$1";
    • 恐怕没用,我一直在尝试在 htaccess 中做类似的想法,但没有成功。我只需要隐藏我的默认控制器con_index,其他的可以保留。
    • 我玩过,在routes.php中加入$route['function1'] = 'con_index/function1'就可以得到我想要的效果。但是,对于默认控制器的每个功能/页面,我都需要这样的规则。不是最好的解决方案,谁能做得更好?
    • 由于 CodeIgniter 在其 url 映射中支持正则表达式,您可以尝试这样的操作:$route['^(?!admin|login).*'] = “con_index/$0″;。现在您所要做的就是用您不希望与映射匹配的控制器替换 admin 或 login。只需将它们分开 |介于两者之间。
    【解决方案3】:

    enter code here$route['(:any)'] = 'controller_name/function_name/$1';

    它将替换控制器,然后您可以尝试通过不将控制器名称放入其中来访问 url。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多