如何在WSGI中使用mod_rewrite?

时间:2019-01-02 14:18:28

标签: apache wsgi

我的Apache配置包含这些行。

WSGIScriptAlias /DEV        /var/www/wsgi/dham.wsgi

RewriteEngine   on
RewriteRule     /jw1        /index.html
RewriteRule     /jw2        /DEV/jobwatch/

我不明白的是:

  • curl localhost / DEV / jobwatch /->有效
  • curl localhost / host / jw1->有效
  • curl localhost / jw2-> 404未找到

那是为什么?我认为这与AllowOverride无关,因为(根据Apache文档)它仅与.htaccess文件有关。

编辑:

启用重写跟踪后,我在error_log中找到以下条目:

rewrite '/jw1' -> '/DEV/jobwatch'
local path result: /DEV/jobwatch
prefixed with document_root to /var/www/html/DEV/jobwatch
go-ahead with /var/www/html/DEV/jobwatch [OK]

这是没有道理的,因为mod_rewrite docs mod_rewrite文档专门说:

  

请注意,mod_rewrite会尝试猜测您是否已指定   文件系统路径或URL路径,方法是检查第一个段是否   路径的路径位于文件系统的根目录。例如,如果您   指定/www/file.html的替换字符串,则将是   除非在根目录下存在名为www的目录,否则将被视为URL路径   或您的文件系统

这不应该发生,因为我显然在文件系统中的任何地方都没有叫/ DEV的东西,更不用说在/ var / www层次中了。

好的,将[PT]添加到重写规则中后,该错误消失。它可以正常工作,但是现在呈现的页面中的每个链接都包含“ / DEV”位,这是合乎逻辑的,因为WSGI应用程序(正确)认为它位于/ DEV下。到目前为止,我还不知道如何摆脱它,但这是次要问题。

0 个答案:

没有答案