如何从我的网址中隐藏“cgi-bin”,“。py”等?

时间:2009-05-19 12:24:38

标签: python cgi

全新的网页设计,使用python。启动Apache并运行,测试在cgi-bin目录下运行的python脚本。当我明确输入网址时获得有效结果:“... / cgi-bin / showenv.py”

但我不希望网址看起来那样。例如,在stackoverflow中,显示在我的地址栏中的URL永远不会有杂乱的细节显示用于运行它们的脚本。他们没有cgi-bin,.py等扩展。我该怎么做?

编辑:感谢您的回复,每一个都很有帮助,很多东西需要学习。我现在正在使用URL重写;文档中的示例看起来非常接近我实际想要做的事情。但是我致力于python,所以将不得不关注WSGI。

6 个答案:

答案 0 :(得分:14)

编写Web应用程序的python方式不是cgi-bin。这是使用WSGI

WSGI是Web服务器和Python Web应用程序或框架之间的标准接口。 PEP 0333定义了它。

使用它而不是CGI没有任何缺点。你会获得很多。美丽的网址只是您可以轻松完成的一件事。

此外,编写WSGI应用程序意味着您可以在支持WSGI接口的任何Web服务器上进行部署。 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!']

答案 1 :(得分:5)

我认为您可以通过Apache配置重写URL来实现此目的。您可以查看Apache文档以重写here

答案 2 :(得分:4)

您必须使用网址重写。

这不是一个noob问题,它可能非常棘手:)

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

希望你觉得有用

答案 3 :(得分:4)

只需使用一些优秀的网络框架,例如django,你可以有这样的URL 除了URL之外,您还将拥有更好的基础架构,模板,数据库等等。

答案 4 :(得分:4)

这是我用来实现这种事情的.htaccess的摘录,这例如将所有不是index.php的请求重定向到该文件,当然你必须检查内部的服务器变量您重定向的文件,以查看请求的内容。

或者你只是制作一个重写规则,你可以使用像^.*\/cgi-bin\/.*\.py$这样的RegExp来确定重写的时间和内容。必须非常仔细地制作这样的RegExp,以便只在需要时进行重写。

<IfModule mod_rewrite.c>
    RewriteEngine On   #activate rewriting
    RewriteBase /      #url base for rewriting
    RewriteCond %{REQUEST_FILENAME} !index.php #requested file is not index.php
    RewriteCond %{REQUEST_FILENAME} !^.*\.gif$ #requested file is no .gif
    RewriteCond %{REQUEST_FILENAME} !^.*\.jpg$ #requested file is no .jpg
    RewriteCond %{REQUEST_FILENAME} !-d        #is not a directory
    RewriteRule . /index.php [L]               #send it all to index.php
</IfModule>

上面的示例使用RewriteCond itions来确定何时重写(.gif,.jpeg和index.php被排除在外)。

嗯,所以这已经很久了。希望它有点帮助,但你将无法避免学习Apache RewriteEngine的语法。

答案 5 :(得分:3)

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

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

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

你也可能想看看mod_passenger,虽然我上次使用它时,WSGI在库中是一种“二等公民” - 如果它用于服务,它可以检测WSGI脚本整个域,但是没有指令让它运行WSGI应用程序。