2011-01-07 3 views
1

У меня есть приложение django, работающее на http://djangohost/appaddress. Я хотел бы, чтобы проект был доступен по адресу http://differentaddress/app. В настоящее время я могу запустить приложение по желаемому адресу, но используя {% url %} templatetags дает мне неправильный адрес в форме http://differentaddress/app/appaddress. Также, когда я перехожу на адрес приложения django напрямую, все ссылки {% url %} находятся в форме http://djangohost/app/appadress Как это изменить? У меня есть эти входы в апача конф:Проблема с адресом Django/Apache

ProxyPass /app/ http://djangohost/appaddress/ 
ProxyPassReverse /app/ http://djangohost/appaddress/ 
+1

Как вы на самом деле работаете Django? mod_python, mod_wsgi? –

ответ

0

Возможно, это не правильное решение, но все же некоторое решение проблемы, не мешая настройкам apache. Протестировано с помощью mod_msgi, и это работает как шарм. Вот ссылка: http://fromzerotocodehero.blogspot.com/2011/01/using-proxypass-with-django-project.html. В принципе, я заработал встроенную функцию url, создав специальный urlc temlpatetag. В коде тега я добавил строку, заменяющую первое появление нежелательного имени приложения пустым знаком.

+1

работает, но изменение всего URL-адреса на разные теги утомительно. – marks34

1

Вы, вероятно, придется сказать Django, где он работает, манипулируя SCRIPT_NAME

http://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#force-script-name

Или, если вы хотите, чтобы держать вещи в Apache, вы можете попросить mod_proxy_html - отказ от ответственности: я не использовал его сам, но он требует переписать ссылки на HTML-страницах.

0

Итак, вы хотите «установить» сайт Django по пути под URL? Я уже пробовал это с Apache и mod_proxy, и это было своего рода кошмар, чтобы узнать. Вот что я придумал (вероятно, не является полным или совершенным):

# In your scenario 
FORCE_SCRIPT_NAME = "/app/" 

# End of settings 
_prefix = (FORCE_SCRIPT_NAME or "") 
LOGIN_URL   = _prefix + LOGIN_URL 
LOGIN_REDIRECT_URL = _prefix + LOGIN_REDIRECT_URL 
LOGOUT_URL   = _prefix + LOGOUT_URL 
ADMIN_MEDIA_PREFIX = _prefix + ADMIN_MEDIA_PREFIX 

Очевидно, что это помещает «/ приложение /» в наиболее важной закодированную URL-сайте, а также он устанавливает FORCE_SCRIPT_NAME, чтобы гарантировать, что {% url something %} приведет абсолютный URL-адрес «/ app/something», например.

Это работало для меня, используя mod_wsgi для сайта Django и ProxyPass/ProxyPassReverse для «монтажа». Попробуйте и дайте мне отзывы, меня интересует, является ли это общим решением.

+0

FORCE_SCRIPT_NAME никогда не понадобится для mod_wsgi. Если Django был на сервере Apache, он просто должен быть установлен на том же URL-адресе на сервере-бэкэнд, поскольку он публикуется через веб-сервер с интерфейсом. Однако корректировки URL-адреса входа в систему будут по-прежнему необходимы. –

+0

@ Graham: Ну, я пробовал несколько недель назад и столкнулся с бедой. Как сказано, я использую mod_wsgi (à la 'WSGIScriptAlias ​​/ app/path/to/wsgi.app'). Если я правильно помню, проблема заключалась в переадресации (например, HTTP 302). Я полагаю, под «backend Apache» вы подразумеваете второй Apache, где сайт монтируется на «/» (с первым Apache ProxyPass-ing на серверный сервер)? – AndiDog

Смежные вопросы