我正在将旧站点转换为 CodeIgniter,这涉及保留一些旧 URL。我需要能够传递单个字符,#、AZ 或 az。这是我的模式:
/^[a-zA-Z#]$/
通过将它传递给 preg_match(),在我的所有测试中似乎都可以正常工作。我只是将它添加到这样的 CI 路由中:
$route['(:any)/(/^[a-zA-Z#]$/)'] = "collection/view/$1/alpha/$2";
它给了我这个错误:
Message: preg_match(): Unknown modifier '/'
我一辈子都不能按摩这种模式来让 CI 接受它。我认为它被奇怪地逃脱了。任何帮助,将不胜感激。
更新:
我进入 /core/Router.php 只是为了看看 CI 对这个模式做了什么。这是 CI 使用的:
#^(.+)/(/^[a-zA-Z\#]$/)$#
它将整个传递的字符串转换为一个大模式。
解决了:
在弄清楚 CI 试图创建一个大模式之后,我从头开始重写了该模式并删除了 (:any)。我还用 + 替换了 #。这是我的最终解决方案:
$route['(^(.+)/([a-zA-Z\+]$))'] = "collection/view/$2/alpha/$3";
如果有人有更优雅的模式,请随时发布。谢谢!