【问题标题】:Migrate httpd.conf to .htaccess?将 httpd.conf 迁移到 .htaccess?
【发布时间】:2010-12-04 21:25:26
【问题描述】:

我有一个如下所示的httpd.conf 文件:

Alias /robots.txt /var/www/tech_eval/static/robots.txt
Alias /favicon.ico /var/www/tech_eval/static/favicon.ico

AliasMatch /([^/]*\.css) /var/www/tech_eval/static/styles/$1

Alias /media/ /var/www/tech_eval/static/media/

<Directory /var/www/tech_eval/static>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias /tech_eval /var/www/tech_eval/scripts/django.wsgi

<Directory /var/www/tech_eval/scripts>
Order allow,deny
Allow from all
</Directory>

这适用于我的tech_eval 项目,但它开始导致其他网站出现问题。我认为将所有这些东西移动到位于tech_eval 文件夹中的.htaccess 文件可能是合适的,这样它就不会引起问题。虽然,我认为从.htaccess 运行时所有这些选项都不会起作用吗? 我的选择是什么?我的意思是,我可以通过在所有内容前加上 tech_eval 来解决这个问题,但我最终会为我的所有网站创建一个大主文件,这只会变得一团糟.

【问题讨论】:

  • 您要的是.htaccess 版本的行吗?
  • 您考虑过使用虚拟主机吗?
  • @e.c.ho:我想,如果这是最好的方法。我认为某些Aliases 可以用RewriteRules 完成,但我不知道如何处理WSGIScriptAlias。 @blak3r:嗯?我一生都在共享服务器上工作,终于对这个服务器有了一点控制。我想它会被归类为 VPS 但整个事情对我来说都是新的:) 你必须解释一下。

标签: .htaccess apache2 httpd.conf


【解决方案1】:

实际上并不太清楚您要解决什么问题。为什么您甚至首先使用该配置?看起来您只是从 mod_wsgi 文档中复制了它,而不了解每个位的作用,并在它甚至不适合您的设置时开始使用它。具体来说,mod_wsgi 文档中的示例是一个通用示例,不一定适合 Django。

因此,与其尝试修复该配置以满足某些未知目标,不如描述您需要什么,并告诉您应该使用什么正确的配置。


更新 1

根据我在下面的评论,也许然后使用:

AliasMatch /tech_eval/([^/]*\.css) /var/www/tech_eval/static/styles/$1

Alias /tech_eval/media/ /var/www/tech_eval/static/media/

<Directory /var/www/tech_eval/static>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias /tech_eval /var/www/tech_eval/scripts/django.wsgi

<Directory /var/www/tech_eval/scripts>
Order allow,deny
Allow from all
</Directory>

只需抛弃 robots.txt 和 favicon.ico,或者至少不要从子 URL 站点获取它们,而是将它们直接粘贴到 DocumentRoot 目录中,并使用真正适用于整个站点的那些。

我认为您需要将 Django 设置模块中的“ADMIN_MEDIA_PREFIX”更改为“/tech_eval/media/”。

对于 Django,您甚至不需要 CSS 别名,这原本是一个通用示例来展示概念,而不是适合 Django 的东西。

无论如何,一切都在“/tech_eval”下,不应干扰同一站点上的其他应用程序。

【讨论】:

  • 我没有从 mod_wsgi 文档中复制它,我从 Django tut 中复制了它,我确切地知道它的作用。我有一个名为tech_eval 的项目;该配置特定于该项目。我想以某种方式封装该配置,以便它不会影响我的其他项目(因为httpd.conf 在某种意义上是“全局的”)。我认为它最适合放在实际的项目文件夹中,但我对其他解决方案持开放态度。
  • 教程从'code.google.com/p/modwsgi/wiki/…'复制了它。我担心的是配置正在将内容推送到站点的根目录,以获取位于子 URL 的内容。是的,这就是原始示例所做的,但你真的想要吗?想要 favicon.ico 和 robots.txt 来自那个特定的子 URL 站点做什么?是否要将 CSS 文件推送到根目录?因为 Alias/AliasMatch 优先于 WSGIScriptAlias,所以您可以在 LHS 前加上 '/tech_eval'。只需更改媒体 URL 根目录的 Django 设置。
【解决方案2】:

使用 VirtualHosts 来限制这些行的范围,并使用每个虚拟主机的包含来组织您的配置文件并防止它变得笨拙。

【讨论】:

  • 呃……这是怎么回事?我现在正在查看这个&lt;VirtualHost&gt; 指令……我需要多个IP 地址吗……?在这方面,我是一个完整的 n00b。我最近安装了phppgadmin,它看起来像Alias,因为它设置在/etc/apache2/conf.d。我不能只为我的每个站点都有一个这样的文件吗?那些是自动加载的吗??
  • 不幸的是,Apache 配置文件的组织方式因分布而异。有时足以让你发疯。在 httpd.conf 文件中查找 Include 行,可能靠近底部。如果路径是目录,它将包含该目录中的所有文件。
  • 您不需要为基于名称的虚拟主机提供单独的 IP 地址 (httpd.apache.org/docs/1.3/vhosts/name-based.html) 您确实需要单独的域名(或至少是子域名)——我假设您有因为像“我所有的网站”这样的短语。
  • @Matt: Err..no,我没有单独的域名。它们只是在不同的文件夹中。为学校项目购买域名太便宜了:p
猜你喜欢
  • 1970-01-01
  • 2012-04-17
  • 2021-03-26
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2013-06-12
  • 2016-07-28
  • 2010-12-15
相关资源
最近更新 更多