所以我受阻 我有一个使用Django的Web应用程序,我使用mod_wsgi将其与Apache整合。 但是,另一个人在代理另一台服务器的同一台机器上有指令。 Apache的configuration大致是:
我的应用程序
WSGIScriptAlias /stuff /foo/foo/wsgi.py WSGIPythonPath /foo <Directory /foo/foo> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory>
他的应用程序
<Location "/"> Order Allow,Deny AllowFromAll ProxyPass myotherserver ProxyPassReverse myotherserver </Location>
不幸的是,他的位置指令覆盖了我的脚本指令,并且所有我对http / www.bar.com / stuff的请求最终都不经过wsgi脚本就被转发到http://www.myotherserver.com/stuff 。 我如何向django提出请求/直接提交给Django而不是代理通行证,而不会搞乱他的代码或在另一个服务器上拆分他的实现? 我试过了
RewriteEngine on RewriteCond %{REQUEST_URI} ^!/stuff RewriteRule ^.*$ /bat/$1 [NC,PT] <Location "/bat"> Order Allow,Deny AllowFromAll ProxyPass myotherserver ProxyPassReverse myotherserver </Location>
但是,当它到达另一个服务器时,这会在我的请求上加上一个无效的/ bat目录,并打破了他页面上的所有链接。 我不想破解他的所有链接。
所以,这里有几个问题。 首先,查看接收服务器上的日志告诉我,所有转发的URL都是“/”,导致我的同事的所有照片被破坏。 这是我捕获URI正则expression式中的组错误的结果。 通过将它们包裹在括号中来捕获这些组。
RewriteEngine on RewriteCond %{REQUEST_URI} ^!/stuff RewriteRule ^(.*)$ /bat/$1 [NC,PT]
现在,我做了一些相当有效的工作,但是我希望可以提出一些build议。
<Location "/bat"> Order Allow,Deny AllowFromAll RewriteRule /bat/(.*)$ $1 [PT] ProxyPass myotherserver ProxyPassReverse myotherserver </Location>
所以基本上,如果input的请求不是我的子目录,我重写它,使它有一个子目录。 我通过允许它通过下一个位置指令。 在新的子目录/ bat的位置指令中,我将其更改回原来的状态,并将其传递给另一台服务器,以使地址保持不变。
我遇到了同样的问题。
根据这个线程 , Alias总是取代WSGIScriptAlias 。
但是,根据modwsgi文档 ,它可以被一个标准的Alias指令替代。 解决您的问题将如下所示。 请注意, / stuff是在/
Alias /stuff /foo/foo/wsgi.py WSGIPythonPath /foo <Directory /foo/foo> <Files wsgi.py> Options ExecCGI SetHandler wsgi-script Order deny,allow Allow from all </Files> </Directory> <Location "/"> Order Allow,Deny Allow from all ProxyPass myotherserver ProxyPassReverse myotherserver </Location>