我正在开发一个医疗产品搜索网站。每当用户尝试搜索[COMPANY NAME]药物[DISEASE]时,我需要在搜索引擎中显示我的网站。为此,我在我的网站上创建了一个页面,其中显示了来自网址的公司名称和疾病,并列出了所有产品。
现在我需要给这个页面提供一个网址,如www.sitename.com/[COMPANY NAME] _medicine_ [DISEASE] .html
我正在使用Cakephp框架进行开发。无论如何在routes.php中实现这个url格式?或者还有其他方法吗?请帮忙。
答案 0 :(得分:4)
用斜线分隔它们怎么样?
// www.sitename.com/[COMPANY NAME]/medicine/[DISEASE]
Router::connect('/:company/medicine/:disease', array('controller' => 'diseases', 'action' => 'index'),
array('pass'=>array('company','disease'),
'company'=>"[a-zA-Z\.]+*",
'disease'=>'[a-zA-Z\.]+'));
和控制器
function diseases($company,$disease){
}
我不确定你是否可以使用下划线而不是斜线,我以前从未尝试过。如果你尝试我想知道结果=)
祝你好运
已编辑:好的,我对这个问题太好奇了,我写了一条这样的路线
Router::connect('/:company_medicine_:disease', array('controller' => 'pages', 'action' => 'test'),
array('pass'=>array('company','disease'),
'company'=>'[a-zA-Z]+',
'disease'=>'[a-zA-Z]+'));
并且它不起作用u_U
正如我所怀疑的那样,问题是Cake认为custom route element的名称是:company_medicine
而不是:company
...几分钟之后关于/读取Cake i的代码找到了Cake解析路径的确切位置,并提取了传递元素的名称。它位于 CakeRoute 类 /cake/libs/router.php 中,方法 _writeRoute()(关于第1369行):
preg_match_all('#:([A-Za-z0-9_-]+[A-Z0-9a-z])#', $parsed, $namedElements);
正如你在regexp中看到的那样,元素的名称可以包含下划线,因此Cake认为参数的名称是“:company_medicine”。 所以你有四个解决方案:
medicine_[COMPANY]_[DISEASE]
将 router.php 的第1369行修改为此(不推荐,我认为它会破坏插件的路径):
preg_match_all('#:([A-Za-z0-9]+)#', $parsed, $namedElements);
在你的.htaccess中使用url重写将所有[COMPANY]_medicine_[DISEASE]
重定向到[COMPANY]/medicine/[DISEASE]
,这样蛋糕会看到它用斜线分隔,浏览器会看到它与下划线分开。 (我还没有测试过,我从来没有在.htaccess中为Cake = P添加另一个规则)