使用CodeIgniter路由我有这个规则
$route['^(?!login|profile|signup|notification|member).*/(:num)/(:any)/(:any)'] = "home/$2/$0/$1/$3";
我的网址就像这样http://example.com/memberfolder/7/view_document/WjbZpAPHM6
所以基本上代码应该路由到家庭班级中的view_document()
方法,其中rsegment(5)
为值WjbZpAPHM6
但是,当代码转到主课时,rsegment(5)
的值为view_document
。
正如你所看到的我的路由规则我应该只有5个部分,所以当我打印所有的部分时,我得到了这个:
home view_document memberfolder 7 view_document WjbZpAPHM6
正如您所看到的,我的rsegment(5)
是重复的或rsegment(2)
。即使我只有5个部分,我的文档文件值WjbZpAPHM6
也存储在rsegment(6)
中。
有关如何将rsegment(5)
更正为文档名称的值而不是view_document
此外,我的.htaccess
就是这样:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /example/index.php/$1 [L]
答案 0 :(得分:0)
我对CodeIgniter知之甚少,但我认为你应该替换
$route['^(?!login|profile|signup|notification|member).*/(:num)/(:any)/(:any)'] = "home/$2/$0/$1/$3";
用这个
$route['^(?!login|profile|signup|notification|member).*/(:num)/(:any)/(:any)'] = 'home/$2/$0/$1/$3';
答案 1 :(得分:0)
(:any)
将匹配 CI 3.0 中的任何字符/
或 CI< = 2.1.3 /匹配>
因此,为了使它兼容两个版本,我们只需使用[^/]+
代替:any
手动输入字符匹配,而不使用CI的简写语法。请注意,我们不会放入括号,因为我们不想创建反向引用。
此外,您不会将^
作为CI自动放入。此外,您的反向引用也是错误的。您不使用$0
,而是从$1
开始并进行操作。我把它们改成了正确的数字。
你的路线应该是:
$route['((?!login|profile|signup|notification|member)|member[^/]+)/(:num)/(:any)/(:any)'] = "home/$3/$1/$2/$4";
因此,对于以下URL示例:
memberfolder/7/view_document/WjbZpAPHM6
反向引用将是:
$1 = memberfolder
$2 = 7
$3 = view_document
$4 = WjbZpAPHM6
现在建立您的请求:
home/$3/$1/$2/$4
变为home/view_document/memberfolder/7/WjbZpAPHM6
制作以下内容:
rsegment(1) = home
rsegment(2) = view_document
rsegment(3) = memberfolder
rsegment(4) = 7
rsegment(5) = WjbZpAPHM6