OpenShift,python 2.7和带htaccess的静态文件

时间:2014-09-18 12:30:33

标签: python apache .htaccess openshift

我尝试配置apache来为site.com/img/bla.jpg等网址提供静态文件。 Python cartridge + flask。

我知道wsg/static目录有预先配置的别名,因此我们可以使用site.com/static/bla.jpg。但是我需要额外的静态目录。

项目结构:

/wsgi
  .htaccess
  /img -> $OPENSHIFT_DATA_DIR/some/path (soft link)
  /static
  application

在后端我绑定mysite.com/img/<filename>以测试apache或后端是否处理文件 - 它返回&#34; ok [filename]&#34; string。

我在htaccess中尝试了以下配置:

1 site.com/img/1.jpg - &gt; &#34; ok 1.jpg&#34;

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f  # with and without this condition
RewriteRule ^img/(.+)$ /static/$1 [L]
# RewriteRule ^img/(.+)$ /img/$1 [L]
# RewriteRule ^/img/(.+)$ /img/$1 [L]
# RewriteRule ^img/(.+)$ https://ssl.gstatic.com/gb/images/i1_3d265689.png [L]

据我所知,正则表达式与请求URL不匹配,apache只是将内容传递给后端?

2 site.com/img/1.jpg - &gt; &#34; ok 1.jpg&#34;

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /img/1.jpg https://ssl.gstatic.com/gb/images/i1_3d265689.png [L]

3 site.com/img/1.jpg - &gt;打开谷歌的i1_3d265689.png

RewriteEngine On
RewriteBase /
RewriteRule /img/1.jpg https://ssl.gstatic.com/gb/images/i1_3d265689.png [L]

注意:没有RewriteCond。

那么如何让它发挥作用呢?

我再次希望apache以mysite.com/img/<filename>的身份提供wsg/img/<filename>

openshift有问题还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

看起来我想通了。这个问题分两步解决:

  1. 如果您希望apache为您(而不是您的后端脚本)提供服务,则必须将所有静态文件放入wsgi/static。您无法将apache配置为使用其他目录,因为您只能使用.htaccess文件进行操作,因为它不允许配置此类内容。因此,我无法通过wsgi/img$OPENSHIFT_DATA_DIR/img制作apache服务资源。 我必须在wsgi/static内为这些目录创建符号链接,如:

    /wsgi
        /static
            /img -> (symlink) $OPENSHIFT_DATA_DIR/img
    

    现在我们可以通过site.com/static/img/1.jpg访问图片。

  2. 现在我们需要在site.com/static/img/1.jpg中将site.com/img/1.jpg映射到wsgi/.htaccess。类似的东西:

    RewriteRule ^img/(.+)$ /static/img/$1 [L]
    or
    RewriteRule ^/img/(.+)$ /static/img/$1 [L]
    

    由于regexp强制从URL路径(^)开始搜索,因此无法正常工作。 问题是OpenShift的apache URL路径是<wsgi app name>/%{REQUEST_URI}(至少对RewriteRule而言)。 application/img/1.jpg在我的情况下。因此,^img/(.+)$^/img/(.+)$都不会与网址路径匹配。我不是apache专家,但使用模板配置this link可能会帮助某人找出URL路径问题。 因此解决方案是删除^

    RewriteRule /img/(.+)$ /static/img/$1 [L]
    

    现在我们可以使用site.com/img/1.img,但site.com/randomstuff/img/1.img也可以使用。因此,我使用RewriteCond来过滤此类网址。

  3. 这是我的最终解决方案:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/img/
    RewriteRule /img/(.+)$ /static/img/$1 [L]