[在下方更新]
我在使用带有一些javascript书签功能的mod_wsgi在apache上部署站点时遇到了一些问题; alpha网站已启动并可在此处使用:stemhub.org。问题是书签(这是一个浏览器菜单按钮)提交到像
这样的页面 http://stemhub.org/submit/http://the-users-link.com/here
然后返回一个表单以保存有关链接的元数据。视图函数(flask / werkzeug应用程序)检查数据库以查看是否已添加链接,然后返回带有预先存在或新分配的链接ID的表单,我想这可能会触发某种时序问题。非常奇怪的是,当我第一次提交链接时,我得到了http://stemhub.org/submit/http://the-users-link.com/here
页面,其中包含“未找到”的apache错误,但如果我重新加载页面,我会按预期获得该表单。错误日志包含有关线程异常的消息,但它们也会在网站按预期执行时执行。
该应用程序在另一个端口上并行部署 - stemhub.org:5000 - 在Tornado上运行并且运行正常,以及本地开发版本。
以下是关于它们出现问题的小书签:
工作端口5000版本:javascript:(function(){window.open('http://stemhub.org:5000/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())
问题端口80版本:javascript:(function(){window.open('http://stemhub.org/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())
更新:由于某些原因属于另一个标记,将javascript方法encodeURIComponent
更改为encodeURI
会使所有内容按预期工作,至少在FF和Chrome中是如此。然而,格雷厄姆·杜普顿(Graham Dumpleton)将在未来采取一些更为明智的建议。
答案 0 :(得分:2)
无论您遇到什么问题,您在URL中放置第二个URL的方式都不适用于Apache。这是因为Apache会将重复斜杠折叠成一个斜杠,而那个单斜杠就是Apache托管的应用程序将在PATH_INFO中看到的所有斜杠。
换句话说,如果将其他动态Web应用程序托管机制与Apache结合使用,即使是非Python版本,也不会出现mod_wsgi问题。
BTW,有些人可能会指出未修改的URL在REQUEST_URI中,但依赖于此并不一定是个好主意,因为要弄清楚如何将其拆分并将其映射到SCRIPT_NAME并且PATH_INFO可能并不总是直接取决于是否在Apache中使用了重写规则。建议您调查第二个URL是查询字符串的一部分,而不是URL路径。