我的应用程序中有2个名为Localhost / electronics的控制器类。
网址"Localhost/electronics/cameras"
转到
"localhost/electronics/home/details/cameras".
由于规则
,这种情况正在发生$route['(:any)'] = "home/details/$1";
第二个控制器类specifics()
,它的方法showspecifics()
可通过URL
`"localhost/electronics/specifics/showspecifics/camera1.`
如何执行以下操作?
仅使用帮助.HTaccess
文件,我想...能够使用网址
specifics()
`"localhost/electronics/camera1` .
我知道使用
`$route['(controllername/:any)'] = "specifics/showspecifics/$1";`
是一种接近实现干净URL的可能方式,但这不是我想要的。
请告知如何使用htaccess来完成此任务。
非常感谢任何想法。
答案 0 :(得分:1)
通常,您将捕获URL的最后部分,然后重写请求,例如
RewriteCond %{REQUEST_URI} !^/electronics/specifics/showspecifics/
RewriteRule ^electronics/(.+)$ /electronics/specifics/showspecifics/$1 [L]
RewriteCond
可以防止重写循环。
然而,这不适用于CodeIgniter,因为CodeIgniter会查看REQUEST_URI
以确定提供此请求的控制器和方法。但是REQUEST_URI
并未更改RewriteRule
并且仍为/electronics/camera1
,并且CodeIgniter找不到合适的控制器。
要更改REQUEST_URI
,您必须重定向而不是重写,例如
RewriteRule ^electronics/(.+)$ /electronics/specifics/showspecifics/$1 [R,L]
但这也改变了客户端的URL栏,在这种情况下不需要。
所以,使用.htaccess和CodeIgniter无法实现这一点。
要在CodeIgniter中执行此操作,您可以在application/config/routes.php
中使用适当的路由,例如
$route['(cameras|smartphones|computers)'] = 'home/details/$1';
$route['(:any)'] = 'specifics/showspecifics/$1';
按控制器和方法home/details
处理少数类别,控制器和方法specifics/showspecifics
处理其他所有类别。