在我的CakePHP应用程序中,我设置了如下静态页面:
Router::connect(
'/terms',
array('controller' => 'pages', 'action' => 'display', 'terms')
);
这会将/terms
重写为/pages/display/terms
以制作更漂亮的较短网址。
现在,如果我想为所有静态页面执行此操作,那将会非常多余:
Router::connect(
'/terms',
array('controller' => 'pages', 'action' => 'display', 'terms')
);
Router::connect(
'/privacy',
array('controller' => 'pages', 'action' => 'display', 'privacy')
);
Router::connect(
'/about',
array('controller' => 'pages', 'action' => 'display', 'about')
);
使用常规mod_rewrite,您可以执行以下操作:
/(terms|privacy|about) /pages/display/$1
所以我自然而然地尝试了这个:
Router::connect(
'/(terms|privacy|about)',
array('controller' => 'pages', 'action' => 'display', '$1')
);
它不起作用。是否支持这样的事情,如果是这样的话你怎么做?
答案 0 :(得分:3)
就在我的脑海中,这可能会解决问题。要对您需要执行此操作的部分执行正则表达式匹配,请执行以下操作:
Router::connect(
'/:page',
array(
'controller' => 'pages',
'action' => 'display',
),
array(
'page' => '(terms|privacy|about)',
'pass' => array('page')
)
);
注意如何在第三个参数(数组)中推断URL中的page
占位符。在那里我们说它必须匹配提供的正则表达式。另外值得注意的是,它还表示将page
占位符传递给action
方法。这样它就知道要渲染哪个页面。