CodeIgniter中通过htaccess移除URL内指定模块名称的问题咨询
解决方案
第一步:修改根目录.htaccess配置
你原有配置中误将members、funnel加入了重写排除列表,导致这两个前缀的请求不会被转发到index.php处理,需要移除这两个排除项,修改后完整配置如下:
DirectoryIndex index.php RewriteEngine on RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots\.txt|favicon\.ico) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]
第二步:修改application/config/route.php配置
路由匹配遵循从上到下优先匹配的规则,需要将精确匹配的admin规则放在最前面,再配置不带前缀的通用模块路由,同时原有路由仅支持3段参数,需要调整为适配任意长度的参数,修改后完整配置如下:
switch ($_SERVER['HTTP_HOST']) { case 'app.example.loc': // Admin路由(优先级最高,避免被通用规则覆盖) $route['admin(.*)'] = "admin$1"; $route['admin'] = "admin/index"; // Members路由:所有非admin开头的请求自动映射到members模块 $route['default_controller'] = "members/index"; $route['(:any)'] = "members/$1"; break; default: // Funnel路由:所有请求自动映射到funnel模块 $route['default_controller'] = "funnel/index"; $route['(:any)'] = "funnel/$1"; break; }
效果验证
配置完成后访问规则如下:
http://app.example.loc/admin/*所有admin前缀请求正常映射到admin模块http://app.example.loc/*所有非admin前缀请求自动映射到members模块,无需加/members前缀http://example.loc/*所有请求自动映射到funnel模块,无需加/funnel前缀
内容的提问来源于stack exchange,提问作者Ganesh Aher
相关产品推荐
相关产品推荐

