CakePHP [.htaccess],静态文件作为项目的根

时间:2015-05-05 15:05:31

标签: .htaccess cakephp redirect

我希望能够在app /的同一级别的文件夹中访问项目根目录下的静态文件。这是因为这是我唯一有权在我的服务器上读写文件的目录,因此我们的图像会上传到那里。

所以如果有人写这个网址:

  

www.mysite.com/img-rw

它在[project-root] / my-rw-dir

的文件夹中显示图像

有关如何编辑.htaccess文件的任何想法都可以完成吗?

由于

2 个答案:

答案 0 :(得分:0)

考虑到这是一个课程项目(正如OP在评论中所说)而你并不关心安全漏洞,这就是你能做的。

默认情况下,CakePHP有3个嵌套的.htaccess文件:

  1. /.htaccess(项目根文件夹)
  2. /app/.htaccess
  3. /app/webroot/.htaccess
  4. 当您尝试访问www.mysite.com时,第一个(最顶层)是第一个回复:

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    显然,这会将用户请求权限发送到/app/webroot文件夹。我们可以使用/app/webroot/.htacess中存在的条件检查,而不是立即重定向到webroot,检查给定的URL是否与文件或文件夹匹配。为此,您需要更新父文件(/.htaccess):

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-d # Checks if the given URL matches to a folder
      RewriteCond %{REQUEST_FILENAME} !-f # Checks if the given URL matches to a file
      #RewriteRule    ^$ app/webroot/    [L] # This line is commented, should be removed
      RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    这样,如果没有满足任何条件,请求只会被重定向到/ app / webroot。如果您只需要返回文件,则可以删除RewriteCond %{REQUEST_FILENAME} !-d,以验证URL是否与文件夹匹配(-d =目录)。

    只检查文件的清洁版本应如下所示:

    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    

    通过此调整,访问www.mysite.com/image.jpg应该返回项目根目录(image.jpg)托管的文件/image.jpg

答案 1 :(得分:0)

For anyone wondering, this works great :

.htaccess (project root)

import matplotlib.dates as md
yfmt = md.DateFormatter('%H:%M')
ax.yaxis.set_major_formatter(yfmt)