如何隐藏URL中的"cgi-bin"、".py"等?

13 投票
6 回答
10796 浏览
提问于 2025-04-15 11:41

我刚开始学习网页设计,正在用Python。已经把Apache服务器搞定了,测试用的Python脚本在cgi-bin目录下可以正常工作。当我在地址栏输入网址“.../cgi-bin/showenv.py”时,可以得到正确的结果。

但是我不想让网址看起来那么复杂。比如在stackoverflow上,地址栏里的网址从来不会显示那些复杂的细节,比如用来运行的脚本名。它们看起来很干净,没有cgi-bin、.py等后缀。那么我该怎么做呢?

补充:谢谢大家的回复,每一个都很有帮助,我还有很多东西要学。我现在打算使用网址重写,文档里的例子看起来和我想做的非常接近。不过我还是会继续用Python,所以以后还得研究一下WSGI。

6 个回答

4

你会发现 ScriptAlias 指令很有用。使用

ScriptAlias /urlpath /your/cgi-bin/script.py

你可以通过 http://yourserver/urlpath 来访问你的脚本。

你可能还想了解一下 mod_passenger,不过我上次使用它的时候,WSGI 在这个库里有点像“二等公民”——它可以在服务整个域名的时候检测到 WSGI 脚本,但如果不是这样,就没有指令可以让它运行 WSGI 应用。

5

我觉得你可以通过修改Apache的配置来实现这个功能。你可以在Apache的文档中查看关于重写URL的内容,具体可以点击这里

14

用Python写网页应用程序的方式不是通过cgi-bin,而是使用WSGI

WSGI是一个标准接口,它连接了网页服务器和Python的网页应用或框架。这个标准在PEP 0333中有详细说明。

使用WSGI没有任何缺点,相比于CGI,它能给你带来很多好处。比如,漂亮的网址就是你可以轻松实现的一个很酷的功能。

而且,写一个WSGI应用意味着你可以在任何支持WSGI接口的网页服务器上部署它。比如,Apache服务器可以通过使用mod_wsgi来实现。

你可以这样在Apache中配置它:

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.py

这样一来,所有对http://myserver.domain/myapp的请求都会转到myapp.py中的application可调用对象,包括http://myserver.domain/myapp/something/here的请求。

下面是一个myapp.py的示例:

def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/plain')])
    return ['Hello World!']

撰写回答