WSGIScriptAlias但WSGIScriptAliasMatch不考虑DirectoryIndex

时间:2015-07-21 18:46:05

标签: python python-2.7 python-3.x mod-wsgi wsgi

这是我在/etc/httpd/conf.d/中的a.conf 而不是编辑httpd.conf我只使用a.conf

NameVirtualHost *:80


<VirtualHost *:80>
DirectoryIndex 1
DocumentRoot /a/b/
ServerName domain.tld
WSGIScriptAlias /1 /a/1.wsgi
WSGIScriptAlias /2 /a/2.wsgi
</VirtualHost>
如果我通过网络访问domain.tld,则在此示例中

WSGIScriptAlias /1 /a/1.wsgi

自动执行。

但是让我们摆脱WSGIScriptAlias并改用WSGIScriptAliasMatch。

<VirtualHost *:80>
DirectoryIndex 1
DocumentRoot /a/b/
ServerName domain.tld
WSGIScriptAliasMatch ^/(.*) /a/$1.wsgi
</VirtualHost>

现在..当我通过网络访问domain.tld时...我没有看到1.wsgi 相反,它是默认的apache欢迎页面。

所以看起来像..

WSGIScriptAliasMatch ^/(.*) /a/$1.wsgi

没有注意

DirectoryIndex 1

换句话说,通过web domain.tld / 1工作,但domain.tld没有...

造成这种情况的原因是什么?

怎么回事?

WSGIScriptAlias /1 /a/1.wsgi
在给定DirectoryIndex 1的情况下,

可以将domain.tld解释为domain.tld / 1 但..

WSGIScriptAliasMatch ^/(.*) /a/$1.wsgi 
在给定DirectoryIndex 1的情况下,

无法将domain.tld解释为domain.tld / 1 ?

一旦我解决了这个问题,我计划确保只接受数字1到99,并指向wsgi脚本。

换句话说.. domain.tld / 1(索引)到domain.tld / 99这将指向99.wsgi

换句话说,我理解(。*)可能是一个安全问题..但首先我想解决为什么.. DirectoryIndex没有被视为...由WSGIScriptAliasMatch ...当它被认为是好的 WSGIScriptAlias

如果我未能解决这个问题..我将不得不使用99行..

WSGIScriptAlias /1 /a/1.wsgi
WSGIScriptAlias /2 /a/2.wsgi
WSGIScriptAlias /3 /a/3.wsgi
...
WSGIScriptAlias /99 /a/99.wsgi
<\ n>在a.conf中

可能不太合乎逻辑。

所有因为DirectoryIndex不能像WSGIScriptAlias那样使用WSGIScriptAliasMatch

1 个答案:

答案 0 :(得分:0)

尝试:

WSGIScriptAliasMatch ^/(.+) /a/$1.wsgi

您正在匹配&#39; /&#39;,并将其映射到&#39; /a/.wsgi'。确保&#39; /&#39;之后至少有一个字符。如果这是你要使用的方案,那么最好还是确保它们是数字。

WSGIScriptAliasMatch ^/([1-9][0-9]*) /a/$1.wsgi