【问题标题】:Apache error in error.log while running Yii application运行 Yii 应用程序时,error.log 中的 Apache 错误
【发布时间】:2014-04-03 09:47:16
【问题描述】:

在 ubuntu 机器上测试我的 yii 应用程序时,/var/log/apache2/error.log 每次访问页面时都会显示以下错误。

客户端被服务器配置拒绝:/var/www/item,引用者:https://xxx.xx.xx.xxx/storemgr/issue/manage

在 Windows 中测试时没有错误记录。

但我在浏览器中访问页面时没有遇到任何问题。

我使用的网址:https://xxx.xx.xx.xxx/storemgr/item/manage

我的 Apache 配置:

<Directory /var/www/storemgr/>
            AllowOverride All
            Order allow,deny
            Allow from all
    </Directory>

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 webroot的内容(即storemgr)

<ifModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
</ifModule>

请帮忙。

【问题讨论】:

    标签: apache yii


    【解决方案1】:

    config.php

    'urlManager' => array(
                'urlFormat' => 'path',
                'showScriptName' => false,
                'caseSensitive' => false,
                'rules' => require(SITE_PATH_CONFIG . '_routes.php'
                    )
            ),
    

    .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
    

    虚拟主机

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName siteName
        DocumentRoot /folder/name
    
        <Directory />
            Options FollowSymLinks
            AllowOverride None
        </Directory>
    
        <Directory /folder/name/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            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>
    

    再次检查您的配置。还想说的是,基于“Windows”的适配中的路由存在问题——简单的例子是“\”不等于“/”,所以在 *nix-list 和 Windows 操作系统中可能会很麻烦。

    还要重新检查您的路线。它匹配它的路由将被使用,所以首先添加(到路由数组)路由短路由,简单的例子应该如何

    'some/<id>/<action>' => 'some/doAction',
    'some/<id>/someAction' => 'some/doActionSome'
    

    永远不要使用第二个。所以你应该先添加它。

    PS:找出问题出在哪里的最佳方法 - 是找出它在哪里崩溃,在什么控制器/方法上等。当你找到时 - 你可以在那里查看使用了什么路线并了解你的问题(或提出问题)。没有它,没有人可以帮助您解决问题。

    【讨论】:

    • AFAICS,不是 Yii 的错,而是 apache 的错
    • 真的吗?嗯,请告诉我你的路线 xxx.xx.xx.xxx/storemgr/issue/manage 我看到三个变量 storemgr(控制器?),问题(动作?),管理(变量?)但没有路线。你有子文件夹?您显示的路线不正确。
    • 我认为这个'webroot'有问题,尝试让 Yii::app()->controller->id 和 Yii::app()->controller->action->id 到查看控制器名称和操作是否正确。此外,您没有显示在 Yii 中声明根文件夹的位置和方式。
    【解决方案2】:

    根本不是 Yii 问题。我猜你最近升级到 13.10 Saucy。 它是 Apache 服务器的一个变化。您需要添加新指令:granted 这是一个例子

    <Directory /var/www/storemgr/>
       Order allow,deny
       Allow from all
       # New directive for new Apache 
       Require all granted
    </Directory>
    

    升级到 2.4 时查看更改here

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多