我建议使用上面 ernie 提到的Yii URL Management完全重写 URL
首先,使用 URL 的路径格式。这是通过首先取消注释protected/config/main.phpurlManager
中的行来完成的(默认情况下在第 34 行左右)。例如,它的作用是让您使用“漂亮的 URL”,而不是看起来像这样的 URL:
www.example.com/index.php?r=user/profile?uid=110
你可以有这样的东西:
www.example.com/user/110
因此,例如,如果我们想将任何具有结构的 URL 路由profile/<a users id>
到我们的用户控制器视图操作 (actionView),我们可以执行以下操作:
'urlManager'=>array(
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => array(
'user/profile/<id:.+>' => 'user/view',
...
所以在数组的左边我们有“URL 的样子”,在右边我们有“它指向的地方”。然后,您可以使用 访问id
视图或控制器中的值$_GET
,例如:
echo "You are viewing user id ".$_GET['id'];
您可以使用此值来查询照片或个人资料内容或与该用户关联的任何内容。就在 URL 中包含用户名(facebook 是如何做到的,例如:)而言facebook.com/myusername
,您很可能会让用户在某处输入他们的虚 URL并将其存储在数据库中。然后,您可以将规则更改为:
'user/profile/<user_vanity_url:.+>' => 'user/view',
然后使用 . 访问与上面相同的值$_GET
。如果你走这条路,一条建议是记住你应该阻止用户查看他们不允许查看的内容,例如查看不是他们朋友的人的照片。我会假设您有某种存储这些关系的表?
关于必须附加 id 或您通过 URL 传递的任何值,您可以简单地将其附加到视图中或创建 HTML 的任何位置,例如,如果您想显示来自用户照片的链接个人资料页面,您可以执行以下操作:
<a href="<?php echo Yii::app()->request->baseUrl; ?>/photos/<?php echo $_GET['id']; ?>"></a>
关于 urlManager 中的 URL 规则的另一件事,规则是从上到下解释的,并且将使用第一个匹配的规则。
希望这可以帮助您走上正确的道路。如果您仍然卡住,请查看以下帖子: