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

2024-01-06

我正在尝试配置 apache 来为 URL 提供静态文件,例如site.com/img/bla.jpg。 Python墨盒+烧瓶。

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

项目结构:

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

我在后台绑定了mysite.com/img/<filename>用于测试 apache 或后端是否处理文件 - 它返回“好的[文件名]” string.

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

1: site.com/img/1.jpg->“好的1.jpg”

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->“好的1.jpg”

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-> 打开谷歌的 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> as wsg/img/<filename>.

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


看来我想通了。该问题分两步解决:

  1. 所有静态文件必须放入wsgi/static如果您希望 apache 为您提供服务(而不是您的后端脚本)。您无法将 apache 配置为使用另一个目录,因为您只能使用.htaccess文件不允许配置此类内容。所以我不能让 apache 提供资产wsgi/img or $OPENSHIFT_DATA_DIR/img。 我必须创建到里面那些目录的符号链接wsgi/static like:

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

    现在我们可以通过以下方式访问图像site.com/static/img/1.jpg.

  2. 现在我们需要地图site.com/static/img/1.jpg to site.com/img/1.jpg in wsgi/.htaccess。就像是:

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

    它不会工作,因为正则表达式强制从 URL 路径的开头进行搜索(^)。 问题是 OpenShift 的 apache URL 路径是什么<wsgi app name>/%{REQUEST_URI}(至少对于RewriteRule). application/img/1.jpg在我的情况下。所以两者都不是^img/(.+)$ nor ^/img/(.+)$将与 URL 路径不匹配。我不是阿帕奇专家,但也许这个链接 https://github.com/openshift/origin-server/blob/master/cartridges/openshift-origin-cartridge-python/usr/versions/shared/etc/conf.d/openshift.conf.erb使用模板配置可能会帮助某人解决 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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐