5

Yii が自分のニーズに合っているかどうかを確認するために、Yii を使っていくつかの実験を行ってきました。最初に有効にしたかったのは、ユーザー フレンドリーな URL です。

私が達成したいこと: この URL からこの URLに移動webapproot/index.php?r=site/contactします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

webapproot/site/contact/ contactだけが必要な場合は、インデックスビューを使用して連絡先コントローラーを作成する必要がある場合は、リンクをコントローラー/アクションのようにする必要があります。

于 2012-07-05T05:55:17.820 に答える
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

于 2012-07-05T14:22:49.890 に答える
2

それを外部に移動したくない場合SiteController(@ Pentium10の回答で十分ですが)、/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>',
    ),
),

/contactあなたは基本的に、 へのリクエストは実際にはへのリクエストであることを Yii に伝えてい/site/contactます。プロジェクトの作成を開始したばかりで、まだ基本的なデフォルト レイアウトを使用している場合は、のCMenu[連絡先] リンクを参照してください。webapproot/contactwebapproot/site/contact

良い1日を

于 2012-07-05T12:38:06.090 に答える