WSGI可以获取完整的URL而不是简单地:environ ['SERVER_NAME']?如果是这样的话...... Mod_Rewrite替代?

时间:2014-09-18 08:50:08

标签: python apache python-2.7 mod-wsgi wsgi

目前..

 environ['SERVER_NAME']

可以获取域名。比如..

 domaint.tld

sub.domain.tld

但它也能得到......

domain.tld/file/in/question.extension

还呢?

如果可能..那么这可以以某种方式取代.. mod重写并做这样的事情..

假设网址为

domain.tld/01

我们将其拆分为

 /

然后如果它从0开始,它必须是我们正在寻找的东西..    使用'0'之后的数字

提取可变内容。

可以替换mod_rewrite吗?

由于复杂的正则表达式,我不喜欢触摸mod_rewrite。

1 个答案:

答案 0 :(得分:0)

如果意图是将重写的URL作为子请求反馈到Apache整体并且请求内容仍然可用,则它无法真正替换mod_rewrite。您所能做的就是在特定的Python WSGI应用程序中执行URL重写以使用URL和请求。

第一个关于请求内容的限定条件是,当使用mod_wsgi的守护进程模式时,可以返回没有内容的200响应和Location响应头,其中Location头的值是服务器相对URL。这将导致在Apache级别执行新的子请求,但这样做只能发出没有请求内容的GET请求。

因此,200 / Location响应可以用作WSGI应用程序重新路由WSGI应用程序处理回Apache的请求的方式,以提供不同的资源,例如静态文件甚至PHP应用程序。这绝不是一种可用于替换mod_rewrite的通用机制,只适用于某些用例。

在访问原始请求信息的其他部分的具体点上,您有:

  • SERVER_NAME
  • SCRIPT_NAME
  • PATH_INFO

请参阅WSGI规范中的URL重建:

在Apache / mod_wsgi下你也有REQUEST_URI,但这可能很复杂,因为它没有被解码也没有规范化,可以是服务器相对URL,或者技术上是一种URI格式,包括方案和主机/端口信息。