【问题标题】:Yii2 How to access a folder in "root" folder?Yii2 如何访问“根”文件夹中的文件夹?
【发布时间】:2017-09-29 17:27:35
【问题描述】:

我用 Yii2 高级模板创建了一个网站,我想访问位于“根”文件夹中的上传文件夹中的文件。 我有:

backend/web/
frontend/web/
uploads/

我已关注Yii2. Access to higher level folder的第一个答案

所以我的 .htaccess 是

Options +FollowSymlinks
RewriteEngine On

# deal with backend first
RewriteCond %{REQUEST_URI} /(backend)
RewriteRule ^backend/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^backend/css/(.*)$ backend/web/css/$1 [L]
RewriteRule ^backend/image/(.*)$ backend/web/image/$1 [L]

RewriteCond %{REQUEST_URI} !/backend/web/(assets|css|image)/
RewriteCond %{REQUEST_URI} /(backend)
RewriteRule ^.*$ backend/web/index.php [L]


RewriteCond %{REQUEST_URI} /(assets|css|js|img|font)
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
RewriteRule ^img/(.*)$ frontend/web/img/$1 [L]

RewriteCond %{REQUEST_URI} !/(frontend|backend)/web/(assets|css|js|img|font)/
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php

我的 common/components/Request.php 文件是

<?php

  namespace common\components;

  class Request extends \yii\web\Request 
  {
     public $web;
     public $adminUrl;

     public function getBaseUrl(){
        return str_replace($this->web, "", parent::getBaseUrl()) .$this->adminUrl;
     }

     public function resolvePathInfo(){
        if($this->getUrl() === $this->adminUrl){
            return "";
        }else{
            return parent::resolvePathInfo();
        }
     }
  }
?>

我的fronted/config/main.php

..
'components' => [
    'request' => [
        'cookieValidationKey' => 'xxxxxxxxxxxxxxxxx',
        'csrfParam' => '_csrf-frontend',
        'class' => 'common\components\Request',
        'web'=> '/frontend/web'
    ],

现在我可以使用 localhost/myapp(没有 /frontend/web/)访问我的网站

在我看到上传文件夹中的图片之前,

Html::img('../..'/uploads/my-image.png')

但它不再起作用了,无论是 ../../uploads 还是 uploads/

如何访问上传文件夹?

【问题讨论】:

    标签: yii2 yii2-advanced-app


    【解决方案1】:

    .htaccess 文件中的更改。

    添加uploads目录RewriteCond喜欢

    RewriteCond %{REQUEST_URI} !/(uploads)/ 
    

    .htaccess文件下方显示。

    Options +FollowSymlinks
    RewriteEngine On
    
    # deal with backend first
    RewriteCond %{REQUEST_URI} /(backend)
    RewriteRule ^backend/assets/(.*)$ backend/web/assets/$1 [L]
    RewriteRule ^backend/css/(.*)$ backend/web/css/$1 [L]
    RewriteRule ^backend/image/(.*)$ backend/web/image/$1 [L]
    
    RewriteCond %{REQUEST_URI} !/backend/web/(assets|css|image)/
    RewriteCond %{REQUEST_URI} /(backend)
    RewriteRule ^.*$ backend/web/index.php [L]
    
    
    RewriteCond %{REQUEST_URI} /(assets|css|js|img|font)
    RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
    RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
    RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
    RewriteRule ^img/(.*)$ frontend/web/img/$1 [L]
    
    RewriteCond %{REQUEST_URI} !/(frontend|backend)/web/(assets|css|js|img|font)/
    RewriteCond %{REQUEST_URI} !/(uploads)/
    RewriteCond %{REQUEST_URI} !index.php
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ frontend/web/index.php
    

    【讨论】:

      【解决方案2】:

      在vhost配置中创建一个别名(替换公用文件夹的真实路径)并允许访问它,例如:

      Alias /uploads /var/www/html/public
      
      <Directory /var/www/html/public>
              Order allow,deny
              Allow from all
              Require all granted
      </Directory>
      

      然后您可以向 /uploads 文件夹发出请求。

      【讨论】:

      • 感谢您的回答。但是我无法修改 vhost 配置,因为我的服务器由 Plesk 管理并且我没有 SSH 访问权限,还有其他解决方案吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 2016-12-15
      相关资源
      最近更新 更多