1

私は php と Yii の初心者であり、これは非常にばかげた質問と思われるかもしれません。Mac OS X で Yii フレームワークを使用して Web アプリケーションを開発しています。私が取り組んでいるコードベースは、Windows マシン上でセットアップされ、Windows OS 上で完全に正常に動作します。しかし、Mac OS X で実行しようとすると、404 not found エラーが発生します。main.php 設定ファイルの URL ルーティングに問題があるようです。

私のURLマネージャーには次のコードがあります

    'urlManager'=>array(
        'showScriptName'=>false,
        'caseSensitive'=>true,
        'urlFormat'=>'path',
        'rules'=>array(

            '' => 'home',
            'learn-more' => 'home/learn_more',
            'cpi'  => 'cpi/index',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            '<controller:\[\w\-]+>/<action:\[\w\-]+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\[\w\-]+>/<action:\[\w\-]+>/<code:\w+>'=>'<controller>/<action>',
            '<controller:\[\w\-]+>/<action:\[\w\-]+>'=>'<controller>/<action>',
        ),
    ),

私のフォルダ構造は次のようになります

> protected
    > components
    > config
    > controllers
    > views
        > about
        > careers
        > contact
        > cpi
        > devadmin
        > error
        > home
        > info
        > layouts

プロジェクト フォルダーの .htaccess ファイルには、次のコード行があります。

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

私のホームページhttp://mysite.comは /home/index (つまり、HomeController の index アクション) にマップする必要があり、これは完全に機能します。「views」の下の他の各フォルダーには、index.php ファイルがあります。タイプhttp://mysite.com/devadminの URLを /devadmin/index にマップする必要があります。既存のルールは、Windows OS で実行すると完全に機能しますが、Mac OS ではエラーが発生します。URL マネージャーに Windows 固有のコードがあるかどうか疑問に思っています。誰かがこれに対する解決策を提案してくれたらうれしいです。

4

3 に答える 3

0

domain.com/devadmin最後になくても機能させたい場合は/index、URL マネージャーに別のルールを追加する必要があります。

        '' => 'home',
        'learn-more' => 'home/learn_more',
        'cpi'  => 'cpi/index',
        '<controller:\w+>' => '<controller>/index', //this is the line you need to add
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        '<controller:\[\w\-]+>/<action:\[\w\-]+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\[\w\-]+>/<action:\[\w\-]+>/<code:\w+>'=>'<controller>/<action>',
        '<controller:\[\w\-]+>/<action:\[\w\-]+>'=>'<controller>/<action>',
于 2013-06-10T13:10:44.410 に答える
0

ホスト構成ファイルを確認してください。たとえば、* nix のような OS では、独自の (1 つのホストに 1 つのファイル) ファイルがあります。

(私、あなたは別のものを持っています)

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName *ServerName*
    DocumentRoot /home/nick/public_html/sitefolder

    # this one is for any folder without rules
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    # this one for custom folder
    <Directory /home/nick/public_html/sitefolder/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All # this one we need to change!
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

これはデフォルトの構成ファイルです。でも再確認したほうがいい

  1. サーバー名;
  2. フォルダ\ディレクトリ;
  3. ルート ディレクトリで「AllowOverride All」を設定する必要があります。これは重要です。そうしないと、.htaccess が機能しません。この場合、最初のルールではなく、2 番目のディレクトリ ( <Directory /home/nick/public_html/sitefolder/>) ルールを意味します。

適切な URL ルートを機能させるのに役立ちました。

PS: はい、ホストをより安全にするためにもっと変更できることはわかっていますが、ここでは Yii でルート (および mod_rewrite) が機能しないことについて話しています。

于 2014-03-23T15:33:16.560 に答える
0

このようなことをしてみてください:

'urlManager' => array(
    'showScriptName' => false,
    'caseSensitive'  => true,
    'urlFormat'      => 'path',
    'rules'          => array(
        ''                                 => 'home',
        'learn-more'                       => 'home/learn_more',
        'cpi'                              => 'cpi/index',
        '<controller>/<action>/<id:\d+>'   => '<controller>/<action>',
        '<controller>/<action>/<code:\w+>' => '<controller>/<action>',
    ),
),

私はあなたの要件を知りません。役に立たない場合は、質問に詳細を追加してみてください。

于 2013-06-07T15:47:15.703 に答える