1

使用 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()home 类中的方法,并且rsegment(5)是 valueWjbZpAPHM6

但是,当代码转到 home 类时,rsegment(5)值是view_document.

正如您在我的路由规则中看到的那样,我应该只有 5 个 rsegments,所以当我打印所有 rsegments 时,我得到了这个:

主页 view_document memberfolder 7 view_document WjbZpAPHM6

如您所见, myrsegment(5)是重复的或rsegment(2). 即使我应该只有 5 个 rsegments,我的文档文件值WjbZpAPHM6也存储在rsegment(6).

关于如何更正rsegment(5)为文档名称的值的任何建议,而不是view_document

另外,我.htaccess的也是这样:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /example/index.php/$1 [L]
4

2 回答 2

0

(:any)将匹配除CI 3.0/中的任何字符或将匹配CI <= 2.1.3中的任何字符/

因此,为了使其兼容两个版本,我们只需手动输入字符匹配,而不使用 CI 的简写语法,而是使用[^/]+. :any请注意,我们不放在括号中,因为我们不想创建反向引用。

此外,您不会^像 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

制作以下 rsegments:

rsegment(1) = home
rsegment(2) = view_document
rsegment(3) = memberfolder
rsegment(4) = 7
rsegment(5) = WjbZpAPHM6
于 2013-03-20T18:20:05.700 回答
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';
于 2013-03-20T17:43:19.030 回答