这是我在/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
答案 0 :(得分:0)
尝试:
WSGIScriptAliasMatch ^/(.+) /a/$1.wsgi
您正在匹配&#39; /&#39;,并将其映射到&#39; /a/.wsgi'。确保&#39; /&#39;之后至少有一个字符。如果这是你要使用的方案,那么最好还是确保它们是数字。
WSGIScriptAliasMatch ^/([1-9][0-9]*) /a/$1.wsgi