Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenShift、python 2.7和带有htaccess的静态文件_Python_Apache_.htaccess_Openshift - Fatal编程技术网

OpenShift、python 2.7和带有htaccess的静态文件

OpenShift、python 2.7和带有htaccess的静态文件,python,apache,.htaccess,openshift,Python,Apache,.htaccess,Openshift,我正在尝试配置apache,以便为URL提供静态文件,如site.com/img/bla.jpg。 蟒蛇筒+烧瓶 我知道wsg/static目录有一个预配置的别名,所以我们可以使用site.com/static/bla.jpg。但我需要额外的静态目录 项目结构: /wsgi .htaccess /img -> $OPENSHIFT_DATA_DIR/some/path (soft link) /static application 在后端,我绑定了mysite.com/i

我正在尝试配置apache,以便为URL提供静态文件,如
site.com/img/bla.jpg
。 蟒蛇筒+烧瓶

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

项目结构:

/wsgi
  .htaccess
  /img -> $OPENSHIFT_DATA_DIR/some/path (soft link)
  /static
  application
在后端,我绑定了
mysite.com/img/
以测试apache或后端是否处理文件-它返回“ok[filename]”字符串

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

1
site.com/img/1.jpg
->“ok 1.jpg”

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

2
site.com/img/1.jpg
->“ok 1.jpg”

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

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

那么如何让它工作呢

我再次希望apache以
wsg/img/
的形式提供
mysite.com/img/


openshift有什么问题吗?或者我错过了什么?

看起来我已经明白了。该问题分两步解决:

  • 如果希望apache为您提供服务(而不是后端脚本),所有静态文件都必须放在
    wsgi/static
    中。您不能将apache配置为使用另一个目录,因为您只能使用
    .htaccess
    文件进行操作,该文件不允许配置此类内容。因此,我无法使apache从
    wsgi/img
    $OPENSHIFT\u DATA\u DIR/img
    提供资产。 我必须在
    wsgi/static
    中创建指向这些目录的符号链接,如:

    /wsgi
        /static
            /img -> (symlink) $OPENSHIFT_DATA_DIR/img
    
    现在我们可以通过
    site.com/static/img/1.jpg
    访问图像

  • 现在我们需要将
    site.com/static/img/1.jpg
    映射到
    wsgi/.htaccess
    中的
    site.com/img/1.jpg
    。比如:

    RewriteRule ^img/(.+)$ /static/img/$1 [L]
    or
    RewriteRule ^/img/(.+)$ /static/img/$1 [L]
    
    而且它将不起作用,因为regexp强制从URL路径(
    ^
    )的开头进行搜索。 问题是OpenShift的apacheurl路径是什么(至少对于
    RewriteRule
    )<代码>应用程序/img/1.jpg在我的情况下。因此,
    ^img/(.+)$
    ^/img/(.+)$
    都不会与URL路径匹配。我不是apache专家,但使用模板配置可能有助于解决URL路径问题。 因此,解决方案是删除
    ^

    RewriteRule /img/(.+)$ /static/img/$1 [L]
    
    现在我们可以使用
    site.com/img/1.img
    ,但
    site.com/randomstuff/img/1.img
    也可以使用。因此,我使用
    RewriteCond
    来过滤这些URL

  • 以下是我的最终解决方案:

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

    谢谢,你让我开心。我用这个把头撞在墙上。
    RewriteRule /img/(.+)$ /static/img/$1 [L]
    
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/img/
    RewriteRule /img/(.+)$ /static/img/$1 [L]