在您的 URL 管理器 ( protected/config/main.php ) 中,设置urlFormat
为path
(并且顶部设置showScriptName
为false
(这会隐藏 URL 的 index.php 部分))
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName'=>false,
接下来,在您的规则中,您可以设置如下内容:
catalogue/<category_url:.+>/<product_url:.+> => product/view,
因此,它的作用是使用目录/电子产品/ ipods 之类的结构向ProductController actionView路由和请求。然后,您可以像这样访问 URL 的category_url
和product_url
部分:
$_GET['category_url'];
$_GET['product_url'];
此规则的工作原理是,任何以单词 catalog(紧跟在您的域名之后)、后跟另一个单词 ( category_url
) 和另一个单词 ( product_url
) 的 URL 都将被定向到该控制器/操作。
您会注意到,在我的示例中,我在类别和产品前面加上了目录一词。显然,您可以将其替换为您喜欢的任何内容,或者将其全部省略。我将其放入的原因是,请考虑以下 URL:
http://mywebsite.com/site/about
如果您遗漏了 URL 的“目录”部分并将您的规则定义为:
<category_url:.+>/<product_url:.+> => product/view,
URL 管理器会将 URL 的站点部分视为category_url
值,将 about 部分视为product_url
. 为了防止这种情况,您可以使用 URL 的目录部分,或者为非目录页面定义规则(即;为site/about定义规则)
规则从上到下解释,并且只有第一个规则匹配。显然,您可以根据需要为尽可能多的不同 URL 结构添加尽可能多的规则。
我希望这能让您走上正确的道路,请随时对您需要的任何问题或说明发表评论