can WSGI get the full URL rather than simply : environ['SERVER_NAME'] ?.. if so.. Mod_Rewrite alternative?

孤街醉人 提交于 2019-12-12 02:58:12

问题


Currently..

 environ['SERVER_NAME']

can get the domain name. such as..

 domaint.tld

or

sub.domain.tld

but can it also get..

domain.tld/file/in/question.extension

also ?

if that is possible.. then can this somehow replace.. mod rewrite and do something like this..

suppose the url is

domain.tld/01

we split this at

 /

and then if it starts with 0 it must be something that we are looking for.. use the number after '0'

to pull out variable content.

can this replace mod_rewrite ?

i do not like touching mod_rewrite due to complex stuff of regex..


回答1:


It cannot really replace mod_rewrite if the intent is that the rewritten URL be fed back in as a sub request into Apache as a whole with request content still available. All you can really do is perform URL rewriting for use of the URL and request within a specific Python WSGI application.

The qualification on the first about request content is that when using daemon mode of mod_wsgi, it is possible to return a 200 response with no content and a Location response header, where the value of the Location header is a server relative URL. This will cause a new sub request to be performed at the Apache level, but in doing that it can only issue a GET request with no request content.

The 200/Location response can thus be used as a way for a WSGI application to reroute a request the WSGI application handles back to Apache to serve up a different resource, such as a static file or even a PHP application. This is by no means though a general mechanism that could be used to replace mod_rewrite and would only be suitable in certain use cases.

And on the specific point of access to other parts of the original request information, you have:

  • SERVER_NAME
  • SCRIPT_NAME
  • PATH_INFO

See for example URL reconstruction in the WSGI specification at:

  • http://legacy.python.org/dev/peps/pep-3333/#url-reconstruction

Under Apache/mod_wsgi you also have REQUEST_URI, but that can be complicated to deal with as is not decoded nor normalised and can be a server relative URL or technically a URI format including scheme and host/port information.



来源:https://stackoverflow.com/questions/25908171/can-wsgi-get-the-full-url-rather-than-simply-environserver-name-if-so

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!