1

我是 php 和 Yii 的新手,这可能是一个非常愚蠢的问题。我在 Mac OS X 上使用 Yii 框架来开发 Web 应用程序。我正在处理的代码库是在 Windows 机器上设置的,并且在 Windows 操作系统上运行良好。但是,当我尝试在我的 Mac OS X 上运行它时,我收到 404 not found 错误。main.php 配置文件中的 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 中的索引操作),这样可以完美运行。“views”下的每个其他文件夹都有一个 index.php 文件。我需要将http://mysite.com/devadmin类型的 url 映射到 /devadmin/index。现有规则在 Windows 操作系统下运行时运行良好,但在我的 Mac 操作系统上给我一个错误。我想知道我的网址管理器中是否有任何特定于 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-like 操作系统中它有自己的(一个主机一个文件)文件,现在让我们看看

(我的,你会有另一个)

<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 将不起作用。在我们的例子中,我指的是第二个目录 ( <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 回答