我正在使用 Python、Flask 和 Apache,但我被困住了。当我尝试使用 www 访问我的网站时,它工作正常。但是,当我删除 www 时,该网站显示“/ 的索引”,接下来是一个空的文件列表。我已经阅读了所有可能的解决方案,在我的情况下没有任何效果。我正在使用 WSGI,这意味着 DocumentRoot 无关紧要,因为我使用的是 WSGIScriptAlias 变量。我按照指示使用 ServerAlias - 没有帮助。我在我的 dns 选项中设置了 2 条单独的 A 记录,它们都指向同一个 ip。当我用 www 和不带 www ping 网站时,显示相同的 IP 地址
<VirtualHost *:80>
ServerName mysite.com
ServerAlias www.mysite.com
WSGIScriptAlias / /var/www/mysite/mysite.wsgi
<Directory /var/www/mysite/mysite/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mysite/mysite/app/static
<Directory /var/www/mysite/mysite/app/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
有任何想法吗?
这是“apachectl -S”命令的输出:
VirtualHost configuration:
*:80 is a NameVirtualHost
default server mysite.com (/etc/apache2/sites-enabled /000-default.conf:1)
port 80 namevhost mysite.com (/etc/apache2/sites-enabled /000-default.conf:1)
port 80 namevhost mysite.com (/etc/apache2/sites-enabled /mysite.conf:1)
alias www.mysite.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
似乎 /etc/apache2/sites-enabled/000-default.conf 首先匹配您的请求。远程这个文件,它可能会有所帮助。
更新
是否保留默认虚拟主机取决于您和您想要什么。如果您需要与您托管的域完全匹配,默认虚拟主机将管理所有发送到您的服务器且不属于任何域的请求。如果您只是将服务器的 IP 放入浏览器,则可以是此类请求的示例。
但是,在某些情况下,可以禁用默认虚拟主机。示例:您托管多个域,所有域都使用相同的文档根目录。并且您想在不重新配置 apache 的情况下添加/删除域。
为了理解虚拟主机匹配过程,我建议阅读以下文档:https ://httpd.apache.org/docs/2.4/vhosts/details.html