WSGIScriptAlias 会,但 WSGIScriptAliasMatch 不会考虑 DirectoryIndex

WSGIScriptAlias does but WSGIScriptAliasMatch DOES NOT regard DirectoryIndex

这是我在 /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/.wsgi
</VirtualHost>

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

看起来很像..

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

没有关注

DirectoryIndex 1

换句话说,通过网络域。tld/1 有效,但 domain.tld 无效..

这是什么原因造成的?

怎么会

WSGIScriptAlias /1 /a/1.wsgi

可以将 domain.tld 解释为域。tld/1 给定 DirectoryIndex 1 但是..

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

无法将 domain.tld 解释为域。tld/1 给定 DirectoryIndex 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

在a.conf

这可能不太合逻辑。

都是因为 DirectoryIndex 不能像使用 WSGIScriptAlias 那样使用 WSGIScriptAliasMatch

尝试:

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

您正在匹配“/”,并将其映射到“/a/.wsgi”。确保“/”后至少有一个字符,如果这是您要使用的方案,最好确保它们是数字。

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