我尝试配置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有问题还是我错过了什么?
答案 0 :(得分:3)
看起来我想通了。这个问题分两步解决:
如果您希望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
访问图片。
现在我们需要在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
来过滤此类网址。
这是我的最终解决方案:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/img/
RewriteRule /img/(.+)$ /static/img/$1 [L]