在已经运行 Drupal 的站点的子目录中运行 django 项目 [英] Running a django project in a subdirectory of a site already running Drupal

查看:15
本文介绍了在已经运行 Drupal 的站点的子目录中运行 django 项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题在过去一周左右一直困扰着我,现在我快到最后期限了.我在 Webroot (servername.org) 中运行 Drupal 的 Media Temple DV 服务器上有一个站点.我正在添加一个 django 站点,我希望它位于 url servername.org/myproject.我已经构建了项目(在一个不在 webroot 中的目录中),当我使用 django dev 服务器运行它时它工作正常,但我无法配置 apache 来运行我的 django 站点.我按照本教程 http://how.4cpus.com/installing-django-on-mt-media-temple-dv-35-server-with-mod_python/

This problem has been bugging me for the last week or so and now I am coming up on a deadline. I have a site on a Media Temple DV server that is running Drupal in the webroot (servername.org). I am adding a django site and I would like it to be located at the url servername.org/myproject. I have build the project (in a directory not in the webroot) and it is working fine when I run it with the django dev server but I cannot get apache configured to run my django site. I followed this tutorial http://how.4cpus.com/installing-django-on-mt-media-temple-dv-35-server-with-mod_python/

按照那里的说明进行初始设置和配置 vhost..conf.但是 Drupal 生成的 .htaccess 文件不断抓取我的 url 并返回 404 错误.

to do the initial setup and configured vhost..conf as explained there. But the Drupal generated .htaccess file keeps grabbing my url and returning a 404 error.

到目前为止,我唯一的解决方法是,如果我在 webroot 中创建一个名为 httpdocs/myproject 的子目录,然后转到 url servername.org/myproject 它就可以工作.但是一旦我尝试转到 myproject 的任何子文件夹(例如 servername/myproject/login),我就会再次收到 404 错误.

The only work around I have so far is that if I create a subdirectory in webroot called httpdocs/myproject and then goto the url servername.org/myproject it works. But as soon I try to go to any subfolder of myproject (e.g. servername/myproject/login) I get the 404 error again.

这里有什么帮助吗?我知道它必须是一个简单的一两行 apache 配置,但我无法弄清楚,而且我的想法已经用完了.

Any help here? I know it must be an easy one or two line apache configuration thing but I can't figure it out and I'm running out of ideas.

这是 vhost.conf 文件中的一个片段:

Here is a snippet from the vhost.conf file:

<Location "/myproject/">
  SetHandler python-program
  PythonPath "['/var/www/vhosts/servename.org/']+sys.path"
  PythonHandler django.core.handlers.modpython
  SetEnv DJANGO_SETTINGS_MODULE myproject.settings
  PythonInterpreter myproject
</Location>

这里是 webroot 中的 Drupal .htaccess 文件(注意我在结尾处添加的重写规则,它似乎没有做任何事情):

And here is the Drupal .htaccess file in webroot (notice the rewirte rule I put in near the end that doesn't appear to do anything):

#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl|svn-base)$|^(code-style.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$">
  Order allow,deny
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Force simple error message for requests for non-existent favicon.ico.
<Files favicon.ico>
  # There is no end quote below, for compatibility with Apache 1.3.
  ErrorDocument 404 "The requested file favicon.ico was not found.
</Files>

# Set the default handler.
DirectoryIndex index.php

# Override PHP settings. More in sites/default/settings.php
# but the following cannot be changed at runtime.

# PHP 4, Apache 1.
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On

  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600

  <FilesMatch .php$>
    # Do not allow PHP scripts to be cached unless they explicitly send cache
    # headers themselves. Otherwise all scripts would have to overwrite the
    # headers set by mod_expires if they want another caching behavior. This may
    # fail if an error occurs early in the bootstrap process, and it may cause
    # problems if a non-Drupal PHP file is installed in a subdirectory.
    ExpiresActive Off
  </FilesMatch>
</IfModule>

# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on

  # If your site can be accessed both with and without the 'www.' prefix, you
  # can use one of the following settings to redirect users to your preferred
  # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
  #
  # To redirect all users to access the site WITH the 'www.' prefix,
  # (http://example.com/... will be redirected to http://www.example.com/...)
  # adapt and uncomment the following:
  # RewriteCond %{HTTP_HOST} ^example.com$ [NC]
  # RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
  #
  # To redirect all users to access the site WITHOUT the 'www.' prefix,
  # (http://www.example.com/... will be redirected to http://example.com/...)
  # uncomment and adapt the following:
  # RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
  # RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

  # Modify the RewriteBase if you are using Drupal in a subdirectory or in a
  # VirtualDocumentRoot and the rewrite rules are not working properly.
  # For example if your site is at http://example.com/drupal uncomment and
  # modify the following line:
  # RewriteBase /drupal
  #
  # If your site is running in a VirtualDocumentRoot at http://example.com/,
  # uncomment the following line:
  # RewriteBase /

  # Added by Wil Black Oct. 7, 2010
  RewriteCond %{REQUEST_URI} "/myproject/"
  RewriteRule (.*) $1 [L]

  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

# $Id: .htaccess,v 1.90.2.4 2009/12/07 12:00:40 goba Exp $


  [1]: http://how.4cpus.com/installing-django-on-mt-media-temple-dv-35-server-with-mod_python/

推荐答案

问题可能是 Drupal 抓取了形式为 domain/path1/path2 的 URL 并将它们转换为 domain?q=path1/path2,因此是可能会抓住所有试图到达 Django 的东西,并将其变成一个 drupal 调用.所以我的猜测是您需要做的是向 drupal 的 htaccess 添加一个新的重写条件,告诉它忽略任何针对 Django 子目录的内容.我以前没有这样做过,但我猜你想要这样的东西:

The problem is probably that drupal grabs URL's that are in the form domain/path1/path2 and converts them to domain?q=path1/path2, and thus is probably grabbing everything that is trying to get to Django, and turning it into a drupal call. So my guess is that what you need to do is add a new rewrite condition to drupal's htaccess telling it to ignore anything targeted at the Django subdirectory. I haven't done this before, but I would guess you want something like this:

  RewriteCond %{REQUEST_URI} !=/Django_subdirectory

这应该与该文件中的所有其他重写条件一起使用.

This should go along with all of the other rewrite conditions in that file.

这篇关于在已经运行 Drupal 的站点的子目录中运行 django 项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆