全新的网页设计,使用python。启动Apache并运行,测试在cgi-bin目录下运行的python脚本。当我明确输入网址时获得有效结果:“... / cgi-bin / showenv.py”
但我不希望网址看起来那样。例如,在stackoverflow中,显示在我的地址栏中的URL永远不会有杂乱的细节显示用于运行它们的脚本。他们没有cgi-bin,.py等扩展。我该怎么做?
编辑:感谢您的回复,每一个都很有帮助,很多东西需要学习。我现在正在使用URL重写;文档中的示例看起来非常接近我实际想要做的事情。但是我致力于python,所以将不得不关注WSGI。
答案 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)
答案 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被排除在外)。
答案 5 :(得分:3)
您会发现ScriptAlias
指令很有用。使用
ScriptAlias /urlpath /your/cgi-bin/script.py
您可以通过http://yourserver/urlpath
访问您的脚本。
你也可能想看看mod_passenger
,虽然我上次使用它时,WSGI在库中是一种“二等公民” - 如果它用于服务,它可以检测WSGI脚本整个域,但是没有指令让它运行WSGI应用程序。