如何使路由在多个CodeIgniter应用程序中工作


How to make Routes work in Multiple CodeIgniter Applications?

CodeIgniter应用程序的结构

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

  • /门户(应用程序1)
  • /成员(应用程序2)
  • /管理员(应用程序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 )

索引(工作)的URL

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";  

admin routes.php

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

products routes.php

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

带有控制器的URL

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吗?

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]

我们也面临着与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就可以很好地满足你的要求。

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

此文件结构(多应用程序):

- 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

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