CodeIgniter的现代重写规则和控制器(CodeIgniter Mod Rewrite Rul

2019-10-19 13:12发布

学习PHP,我与mod_rewrite的和笨玩耍。 我与正确配置我的.htaccess文件

RewriteEngine On
RewriteRule ^(resources)/(.*) $1/$2 [L]
RewriteRule ^(user_guide)/(.*) $1/$2 [L]
RewriteRule (.*) index.php?$1 [L]

我了解了一下正则表达式,并可以欣赏这里发生了什么。 重写规则被应用,并且所述服务器处理相比,其在上述区分附着的index.php到“漂亮”的URL的最终URL(前端控制器)。 到现在为止还挺好。

我现在想要一个URL模式:

/<person-name>/at/<place>

获得翻译为:

/index.php/person/list?personName=$1&place=$2

而我把手在人控制我的列表功能的要求。 我不明白为什么下面不工作:

RewriteRule ^([a-z]+)/(at)/([a-z]+)$ index.php/person/list?personName=$1&place=$2 [L]

我在做什么错了/我的理解有缺陷? 我看到,占位符被正确($ 1和$ 3)萃取,但是,它将引发笨404。

非常感谢!

Answer 1:

这可能是最简单的修补程序将解决您的问题。 通过包装“的”括号中,你创建另一个匹配组,这意味着$ 2进行始终是“在。” 这可能是打破一切。 你想index.php?person/list?personName=$1&place=$3 ,但你可能已经注意到这一问题,并固定它没有固定的问题,在这种情况下,请继续阅读。

看看如何让笨接受“查询字符串”的网址? 。 这似乎表明,你不能混搭基于细分的方法和查询字符串的方法。 没有看到你的控制器代码,我不能肯定地说,但我会开始调查存在。 您也可以尝试:

RewriteRule ^([a-z]+)/(at)/([a-z]+)$ index.php?person/list/$1/$3 [L]

这将做下面的通用CI重定向规则做同样的事情; 发送URL关闭以index.php文件作为查询字符串进行处理。 你说你得到了它与路线的工作,因此而不是传递查询字符串到控制器,你可以期待的人,地点和两个参数。 查询字符串的CI的处理极不理想很多,我从来没有试过的mod_rewrite的东西,包括一个查询字符串转换成一个查询字符串。



文章来源: CodeIgniter Mod Rewrite Rules and the Controller