Acache:wsgi 和别名不兼容

Acache: wsgi and alias incompatibility

我正在尝试设置 Apache,以便:

我目前有这个:

<VirtualHost *:80>
    WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
    WSGIScriptAlias /temp/app /home/temp/app/start.wsgi
    Alias /temp /home/temp/public_html

    <Directory /home/temp/app>
        WSGIProcessGroup temp
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>
</VirtualHost *:80>

但奇怪的是 Alias 似乎优先于 WSGIScriptAlias/temp/app 不起作用...

不是特别漂亮,但我(至少目前)是这样解决的:

<VirtualHost *:80>
  WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
  <Directory /home/temp/app>
    WSGIProcessGroup temp
    WSGIApplicationGroup %{GLOBAL}

    Options ExecCGI MultiViews
    MultiviewsMatch Handlers
    AddHandler cgi-script .cgi
    AddHandler wsgi-script .wsgi

    Require all granted
  </Directory>

  Alias /temp /home/temp/app
</VirtualHost>

我没有使用 WSGIScriptAlias,而是自动将其定义为 运行 .wsgi 个文件。 MultiViews 选项匹配 filefile.wsgi.

此外,为了在我自己的脚本中隐藏扩展名,在每个 .wsgi 中我必须重新定义脚本文件名:

from server_public import app as _application  # my flask app
# get rid of the .wsgi extension
def application(environ, start_response):
    if environ['SCRIPT_NAME'].endswith('.wsgi'):
        environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-5]
    return _application(environ, start_response)

我还必须将我的 public_html/index.html 移动到 app/index.html


我更喜欢更简单的解决方案,我为 /temp 提供 index.html,为 /temp/app 提供脚本别名...但不确定是否可行...

你自己的答案更接近了,但还不完全。使用类似于:

<VirtualHost *:80>
    WSGIDaemonProcess temp user=temp group=temp home=/home/temp/app
    Alias /temp/app /home/temp/app/start.wsgi
    Alias /temp /home/temp/public_html

    <Directory /home/temp/app>
        WSGIProcessGroup temp
        WSGIApplicationGroup %{GLOBAL}
        Require all granted

        Options ExecCGI
        AddHandler wsgi-script .wsgi
    </Directory>
</VirtualHost>