PERL Dancer2,cgi调度员和uri_for助手

时间:2015-04-19 03:32:07

标签: apache perl .htaccess cgi dancer

我有一个需要维护和改进的Web界面,用简单的旧CGI.pm方式编写。那个应用程序也没有使用模板系统。这是由apache提供的,就像那样:

/var/www/vhost/myapp/cgi-bin/app.cgi
              /htdocs/css/styles.css
              /htdocs/js/script.js

要向该应用添加新页面,让我的生活更轻松,我想在其旁边主持一个Dancer或Dancer2应用,我正在考虑这样的事情:

/var/www/vhost/myapp/cgi-bin/app.cgi
                    /cgi-bin/dispatch.cgi (the one from Dancer2)
                    /htdocs/css/styles.css
                           /js/script.js
                           /dancer_public/...
                    /dancer2/lib/...
                            /views/...
                            /environement/...

在调度员中,我正在改变到达Dancer2 bin / app.psgi的路径。 我将以下.htaccess文件添加到htdocs目录:

# BEGIN dancer application htaccess
  RewriteEngine On
  RewriteBase /v2
  RewriteRule ^/v2$ /cgi-bin/dispatch.cgi [L]
  RewriteCond %{SCRIPT_FILENAME} !-d
  RewriteCond %{SCRIPT_FILENAME} !-f
  RewriteRule v2/(.*) /cgi-bin/dispatch.cgi/$1 [L]
# END dancer application htaccess

通过这样做,

  • 访问example.com/cgi-bin/app.cgi,向我展示旧应用 如预期的那样
  • 访问example.com/v2告诉我舞者 应用主页,默认一个,没有CSS,这是我移动时的预期 公共目录,以及其他一些修改

现在你有了设置,这里是我遇到问题的地方, 从v2到舞者应用程序的重定向工作非常好,但是,为了保持一致,我希望从v2创建 uri_for 创建URL,但是它使用SCRIPT_NAME作为基本URL,显示问题,当我创建该url时:uri_for('/ mypage'),

  • 我想有那个网址:example.com/v2/mypage,

  • 但我有url example.com/cgi-bin/dispatch.cgi/mypage

SCRIPT_NAME环境变量包含cgi-bin / dispatch.cgi,我有一个可怕的黑客,这是有效的,但显然不是解决方案,我可以通过在cgi调度程序中强制SCRIPT_NAME到/ v2来实现我预期的行为,一个BEGIN块。 如果有人作为一个干净的解决方案,那将是一个很大的帮助!

由于

1 个答案:

答案 0 :(得分:0)

D1遇到同样的问题。

$ ENV {SCRIPT_NAME} ='&#39 ;;

在dispatch.fcgi内帮助我。