【问题标题】:How to make Routes work in Multiple CodeIgniter Applications?如何使路由在多个 CodeIgniter 应用程序中工作?
【发布时间】:2013-12-05 10:34:53
【问题描述】:

CodeIgniter 应用结构

www.domain.com - /资产 - /系统

  • /门户(应用1)
  • /members(应用2)
  • /admin(应用3)
  • /产品(应用4)
portal.php      ( portal application index page )

members.php     ( members application index page )

admin.php       ( admin application index page )

products.php    ( products application index page )

INDEX 的 URLS(工作)

http://www.domain.com/portal.php

http://www.domain.com/members.php

http://www.domain.com/admin.php

http://www.domain.com/products.php

路线

成员 routes.php

$route['mem/display_list'] = "members/get_list";  

门户路由.php

$route['por/display_list'] = "portal/get_list";  

管理路由.php

$route['adm/display_list'] = "admin/get_list";  

产品路线.php

$route['prd/display_list'] = "products/get_list";  

带有控制器的网址

http://www.domain.com/portal.php/portal/get_list

http://www.domain.com/admin.php/admin/get_list

http://www.domain.com/members.php/members/get_list

http://www.domain.com/products.php/products/get_list

问题:我怎样才能使它与路线一起使用..

http://www.domain.com/mem/display_list

http://www.domain.com/por/display_list

http://www.domain.com/adm/display_list

http://www.domain.com/prd/display_list

是不是要在.htaccess文件中配置多个index.php?

【问题讨论】:

  • .htaccess 解决方法是否适用于您的应用?或者您需要其他方式来做到这一点?
  • 你需要看看codeigniter HMVC plugin

标签: php apache .htaccess codeigniter


【解决方案1】:

CodeIgniter 始终使用 index.php(在您的情况下:portal.php、members.php、admin.php、products.php)。您必须将每个请求指向正确的 .php强> 文件。

因此解决方案是在 .htaccess 文件中为它们中的每一个添加 RewriteRules。

我还没有测试过,但我想这样的事情会起作用:

RewriteRule ^mem/(.*)$ members.php/$1 [L]

当然还有其他人:

RewriteRule ^por/(.*)$ portal.php/$1 [L]

RewriteRule ^adm/(.*)$ admin.php/$1 [L]

RewriteRule ^prd/(.*)$ products.php/$1 [L]

【讨论】:

  • 嗨,感谢您的工作解决方案。它在我的 apache2 vbox 中运行得非常好。但是我可以问一个后续问题吗?
  • 我的 .htaccess 在我的 apache vbox 中运行良好。但不知何故,当我在我的托管服务器(mochahost / cpanel)上上传/部署它时……它的行为……异常……它是丢失图像并导致无限循环或..无限重定向?你知道是什么原因造成的吗?当它在 cpanel.. 环境中时???
【解决方案2】:

关于 index.php 我们也面临同样的问题,所以我们有这样的解决方案: 您可以使用 .htaccess 文件,如

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

我们有 index.php,所以你可以使用你的 filename.php 并在 url 中跳过这个文件名,这样你的 URL 就可以很好地满足你的要求。

【讨论】:

    【解决方案3】:

    我看到的唯一可能的答案是拥有多个 .htaccess 文件。 一个在根上,一个用于每个单独的应用程序。 这样您就可以让mod_rewrite 为您工作。

    【讨论】:

      【解决方案4】:

      这种文件结构(多应用):

      - application
          - admin
          - site
      - system
      - index.php
      - admin.php
      

      如果您希望 /admin 重写为 admin.php,则您的重写规则是错误的,根据您当前的规则,它将导致 /index.php/admin。

      你没有提到这是否是问题,如果是这样:

      RewriteRule ^/admin$ admin.php [L,QSA]
      RewriteRule ^(.*) index.php/$1 [L,QSA]
      

      您也可以使用 RewriteLog 调试重写:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog

      如果这不能解决问题,请描述当前行为和您的期望,否则很难提供帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        • 2017-09-29
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        相关资源
        最近更新 更多