5

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

我想要实现的目标:从这个 URLwebapproot/index.php?r=site/contact到这个 URL webapproot/contact

我做了什么:

  • 使用 Yiic ( php YiiRoot/framework/yiic.php webapp testdrive)创建了一个应用程序
  • 按照Yii 文档中此链接的第 2 步和第 6 步进行操作(“用户友好的 URL”和“隐藏 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>
(...)
4

3 回答 3

3

如果您只想要/contact,您的链接必须webapproot/site/contact与控制器/操作中的一样,您需要创建一个带有索引视图的联系人控制器。

于 2012-07-05T05:55:17.820 回答
3

从您的最新评论看来,您还需要设置RewriteBase。正如我在对您的问题的第一条评论中提到的那样,如果您的网络服务器的 DocumentRoot 和您的网络应用程序位于不同的文件夹中,则可能会出现此问题。试试这个:

RewriteEngine on

RewriteBase /~username/yourwebappfolder
#rest of your rewrite conditions/rules

要调试 htaccess 或其他服务器配置,请检查您的服务器 error_log,对于 mac lion,它位于文件中:/var/log/apache2/error_log

于 2012-07-05T14:22:49.890 回答
2

如果您不想将其移到外面(尽管@Pentium10 的回答已经足够好了),您可以为要从路径SiteController中提取的每页添加一条规则。/site/但是,这有点脏,因为您需要尽量不要与其他名为contact、login 或其他名称的控制器发生冲突:

'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。如果您刚开始创建项目并且仍然使用基本的默认布局,请查看CMenuContact 链接,您会看到它现在指向webapproot/contact而不是webapproot/site/contact

祝你今天过得愉快

于 2012-07-05T12:38:06.090 回答