У меня есть веб-интерфейс, который мне нужно поддерживать и улучшать, написанный в старом простом стиле 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 показывает мне домашнюю страницу приложения dancer, по умолчанию, без css, что ожидается, поскольку я переместил общедоступный каталог, и некоторые другие изменения
Теперь, когда у вас есть настройка, вот где у меня есть проблема: перенаправление с v2 на приложение dancer работает очень хорошо, однако, чтобы сохранить согласованность, я хотел бы иметь uri_for создание URL-адреса из v2, но он использует SCRIPT_NAME в качестве базового URL-адреса, чтобы показать проблему, когда я создаю этот URL-адрес: uri_for('/mypage'),
я хотел бы иметь этот URL: example.com/v2/mypage,
но вместо этого у меня есть URL-адрес example.com/cgi-bin/dispatch.cgi/mypage
Переменная среды SCRIPT_NAME содержит cgi-bin/dispatch.cgi , у меня есть один ужасный хак, который работает, но явно не является решением, я могу получить ожидаемое поведение, заставив SCRIPT_NAME в /v2 в диспетчере cgi, в блоке BEGIN . Если бы кто-то как чистое решение для этого, это было бы большим подспорьем!
Спасибо