我一直在和Yii做一些实验,看看它是否符合我的需要。我想要启用的第一件事是用户友好的URL。
我想要实现的目标:从此网址webapproot/index.php?r=site/contact
转到此网址webapproot/contact
。
我做了什么:
php YiiRoot/framework/yiic.php webapp testdrive
)发生的事情是我一直得到404.我做错了什么想法?
以下是该问题的一些相关摘录:
(...)
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
(...)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
(...)
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
(...)
<Directory [path to my web projects folder]>
Options FollowSymLinks
AllowOverride All
Order deny,allow
</Directory>
(...)
答案 0 :(得分:3)
您的链接必须是webapproot/site/contact
,如控制器/操作中所示,如果您只想/联系您需要创建具有索引视图的联系人控制器。
答案 1 :(得分:3)
根据您的最新评论,您似乎也需要设置RewriteBase。正如我在对您的问题的第一次评论中提到的,如果您将Web服务器的DocumentRoot和Web应用程序放在单独的文件夹中,则可能会出现此问题。试试这个:
RewriteEngine on
RewriteBase /~username/yourwebappfolder
#rest of your rewrite conditions/rules
要调试htaccess或其他服务器配置,请检查您的服务器error_log,对于mac lion,它位于文件中: / var / log / apache2 / error_log
答案 2 :(得分:2)
如果您不想将其移到SiteController
之外(尽管@ Pentium10的答案已经足够好),您可以在每个页面中添加要从/site/
路径中提取的规则。但是,这有点脏,因为你需要尝试不与名为等于联系人,登录或其他任何名称的其他控制器发生碰撞:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'contact'=>'site/contact',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
您基本上告诉Yii,对/contact
的任何请求实际上都是对/site/contact
的请求。如果您在项目创建之初并且仍然使用基本默认布局,请查看CMenu
的联系人链接,您会看到它现在指向webapproot/contact
而不是{{ 1}}
度过愉快的一天