python - Django 不使用 fastcgi 提供管理静态文件

标签 python django .htaccess

我正在尝试在子域上部署我的 django 应用程序,例如 example.djangoapp.com,一切正常,除了我的 django 管理站点,当我单击转到管理站点的链接时,它会路由到不同的网址。当我使用管理 url 模板标记时会发生这种情况,即它路由到 djangoapp.com/index 而不是 example.djangoapp.index.fcgi/login (这是管理站点)。

删除管理 url 模板标记后,我将绝对 URL 添加到重定向到管理站点,此操作正常并且管理站点显示,但不提供其静态文件。所以我介于两者之间。

我正在部署在共享托管上运行 fastcgi 的服务器上

我的问题:

1)选项 1(使用管理 url 模板标签):

如何让 django 将我重定向到正确的管理站点 (www.example.djangoapp.index.fcgi/login),而不是将我重定向到 (www.djangoapp.com/index)。

2) 使用绝对 url 时: 现在我在我的主模板索引页面中硬编码了管理链接,这工作正常,但 django 管理静态文件不提供服务。他们如何获得服务?

请原谅我的无知,但我已经为此苦苦挣扎了好几个星期。我决定对 URL 进行硬编码,但管理站点静态文件仍然没有被提供。

下面是我的settings.py、urls.py和index.html(我在其中硬编码了管理站点url)。此代码与上面的选项 2 内联,该选项具有硬编码的管理站点 URL。

设置.py

   WSGI_APPLICATION = 'cconnect_web.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases


DATABASES = {

'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '',
    'USER': '',
    'PASSWORD': '',
    'HOST': '',
    'PORT': '',
    'CONN_MAX_AGE': 3600,
}
}




# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Africa/Cairo'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/cconnect/static/'
STATIC_ROOT = '/home4/techaven/public_html/cconnect/static'
FORCE_SCRIPT_NAME="/index.fcgi/"

网址.py

from django.conf.urls import *
from django.conf.urls import include, url
from django.contrib import admin
from cconnect_frontEnd import views
from . import settings
#app_name = 'cconnect_frontEnd

urlpatterns = [
url(r'^$', views.index, name ='index'),
url(r'^backend/', include('Back_End.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',             {'document_root':settings.STATIC_ROOT}),
]

urlpatterns += patterns('Back_End.views',
(r'^login/$', 'login_view'),
)

admin.site.site_header = 'Cconnect Administration.'

index.html

<body>

<div class="header-wrapper">

<nav>
<div class=nav-wrapper">
    {% load staticfiles %}
    <img src="{% static "cconnect_frontEnd/images/slide/logo.png" %}" alt="Conference Connect"/>
    <ul class="right hide-on-med-and-down">
    {% load admin_urls %}
        <li><a href="http://cconnect.techavenue137.rw/index.fcgi/admin">Sign In</a></li>
        <li><a href="#feature-title">Features</a></li>
        <li><a href="#demo-video">Videos</a></li>
    </ul>

索引.fcgi

import os
import sys

from flup.server.fcgi import WSGIServer
from django.core.wsgi import get_wsgi_application

sys.path.insert(0, "/home4/techaven/public_html/cconnect/cconnect_web/")
os.chdir("/home4/techaven/public_html/cconnect/cconnect_web")
os.environ['DJANGO_SETTINGS_MODULE'] = "cconnect_web.settings"

WSGIServer(get_wsgi_application()).run()

.htaccess

AddHandler fcgid-script .fcgi
DirectoryIndex index.fcgi

RewriteEngine On
RewriteCond %{HTTP_HOST} ^cconnect\.techavenue137\.rw$ [OR]
RewriteCond %{HTTP_HOST} ^www\.cconnect\.techavenue137\.rw$
RewriteRule ^/?$ "http\:\/\/www\.techavenue137\.rw\/cconnect\/index\.fcgi" [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /cconnect/
RewriteRule ^index\.fcgi$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !^/static/
RewriteRule ^(.*)$ /cconnect/index.fcgi/$1 [L]
</IfModule>

感谢您的帮助,并再次原谅我愚蠢的问题。

最佳答案

您需要添加重写规则以将浏览器请求重定向到管理页面的实际静态文件。 在最后的重写规则下方,添加以下行:

RewriteCond "%{REQUEST_URI}" ".*/static/admin/.*"
RewriteRule "(.*)/cconect/(.*)" "$1/index.fcgi/$2" [R, L]

这里的重写条件是如果请求的URI包含/static/admin则将cconnect替换为index.fcgi并保留其他一切都一样。将其标记为重定向 [R],如果找到则停止规则处理 [L]。我希望这能解决您的问题。

免责声明:我对正则表达式模式不是很精通,而且我对 Apache 有基本的了解,所以这个解决方案可能需要调整。看看here如果你需要调整它。

关于python - Django 不使用 fastcgi 提供管理静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37948141/

相关文章:

javascript - 如何在 django 中像在 Instagram 中一样构建书签系统

Django:用户注册时保存引荐来源网址

regex - 重定向到文件名部分已知/部分未知的 CSS/JS 文件

python - 在 StreamField 中显示时,如何在模型中渲染页面属性?

python - 通过 Python 选择要播放的音频设备

Django - 根据当前页面突出显示导航?

php - 嵌套的 PHP 是否包含 CPU/内存密集型?

python - 将目录中的所有 JPG 文件复制到 Python 中的另一个目录?

python - 使用 python 查找低功耗蓝牙

apache - 重定向除 htaccess 中的少数路径之外的所有路径