Yii中的用户友好URL

时间:2012-07-04 22:21:03

标签: .htaccess yii

我一直在和Yii做一些实验,看看它是否符合我的需要。我想要启用的第一件事是用户友好的URL。

我想要实现的目标:从此网址webapproot/index.php?r=site/contact转到此网址webapproot/contact

我做了什么:

  • 使用Yiic(php YiiRoot/framework/yiic.php webapp testdrive
  • 创建了一个应用程序
  • 遵循this link from Yii's documentation的步骤2和6(“用户友好的网址”和“隐藏index.php”)。

发生的事情是我一直得到404.我做错了什么想法?

以下是该问题的一些相关摘录:

[项目根目录] /protected/config/main.php

(...)
'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>',
    ),
),
(...)

[项目根目录] / .htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php

/etc/apache2/httpd.conf

(...)
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
(...)
<Directory [path to my web projects folder]>
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
</Directory>
(...)

3 个答案:

答案 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}}

度过愉快的一天