使用Apache 2,我想配置我的网站,以便将对域的任何请求转发到Python CGI脚本。基本上,如果用户转到http://www.example.com,我希望执行cgi /cgi-bin/cgi.py。如果用户转到http://www.example.com/index.rss,我想用/index.rss作为参数执行/cgi-bin/cgi.py。我尝试过ScriptAlias和Rewrite的各种组合,似乎无法让它们处于正确的关系中。
答案 0 :(得分:3)
RewriteEngine On
RewriteRule ^(.*)$ /cgi-bin/cgi.py?url=$1
这会将所有请求重定向到您的python文件。 如果您仍然遇到脚本别名问题,请尝试在RewriteRule行的末尾添加passthrough标志[PT] 如果您仍希望能够访问图像等,请在RewriteRule之前添加:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
答案 1 :(得分:2)
(不确定正确的程序,回答自己的问题 - 但是......)
看起来我和ScriptAlias和RewriteRule有冲突。最后,解决方案是使用AddHandler创建一个关系,然后使用mod_rewrite将所有内容都拉入CGI。并RewriteCond避免捕获/ resources /和/ media /。我的VirtualHost现在看起来像这样:
AddHandler cgi-script .cgi
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/resources/.*$
RewriteCond %{REQUEST_URI} !^/media/.*$
RewriteRule ^(.*)$ /cgi-bin/pyblosxom.cgi$1 [L]
感谢您的帮助。
答案 2 :(得分:1)
虽然它不是100%你正在寻找的,但这里是.htaccess我用于一个旧的废弃域名来正确地重定向人。它基本上重定向任何在本地目录结构中找不到的文件或目录。这取决于脚本本身要弄清楚它的名称是什么:
RewriteEngine On
#if the request isn't for a file or a directory...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
答案 3 :(得分:0)
我使用了捕获重写规则,它在一定程度上起作用。问题是,当使用$ 1时,请求URI的原始查询字符串未传递给cgi。我最终删除了捕获并在我的cgi脚本中引用了ENV ['REQUEST_URI']以获得访问权。