【问题标题】:apache2 Allow access to subdirectoryapache2 允许访问子目录
【发布时间】:2014-01-20 19:02:19
【问题描述】:

我目前使用Passenger 在Dreamhost 上运行一个Django 站点。我想在当前保存我的静态文件的“公共”目录中运行一个 Wordpress 博客(我认为它应该存在于其中)。由于 Django 当前拥有所有 /*,我被告知我需要在我的 apache2 服务器的 httpd.conf 中添加一个 Location 条目。我尝试了位置和目录,但无法让它们工作。下面的代码 sn-p 基本上是我用一堆不同的方式输入的。

<Directory /home/user/domain/public/blog/>
Order allow,deny
allow from all
</Directory>

我还尝试添加 AllowOverride All 以尝试捕获博客文件夹中的 htaccess 文件,但没有骰子。我对 apache 非常陌生(第一次),谁能指出我正确的方向,让 /blog/ 显示 wordpress 网站而不是 404 页面。

【问题讨论】:

    标签: django wordpress apache2 passenger


    【解决方案1】:

    尝试添加 Apache Alias 指令:

    Alias /blog/  /home/user/domain/public/blog/
    

    “别名”将与您的“目录”指令一起解决问题。

    注意:我在将 django 加载到 apache 的 wsgi 配置之前列出了这些。 (我不知道这是否重要,但它可能。)

    编辑: 在我的主要 httpd.我的conf文件

    LoadModule wsgi_module modules/mod_wsgi.so
    

    我假设那里有“DocumentRoot”和“Directory”指令。

    下一步:在我的虚拟主机中

    <VirtualHost *:80>
    Alias /blog/  /home/user/domain/public/blog/
    
    <FilesMatch \.(?i:gif|jpe?g|png|ico)$>
      Order allow,deny
      allow from all
    </FilesMatch>
    
    <FilesMatch \.(?i:css|jst|js|txt|htm|html)$>
      Options Indexes FollowSymLinks MultiViews
      Order allow,deny
      allow from all
    </FilesMatch>
    
    <Directory /home/user/domain/public/blog/>
       Order allow,deny
       allow from all
    </Directory>
    

    也许我的 FilesMatch 指令实际上在发挥作用(我之前可能错过了)

    调试 如果你不能做到这一点,你可能想在 apache 中启用更详细的 httpd 日志输出,看看你是否可以让它告诉你它对什么不满意。 您可以通过将 'LogLevel' 指令从 'warn' 更改为 debug

    LogLevel debug
    

    现在

    tail -f /path/to/you/apache/error_logs
    

    【讨论】:

    • 感谢您的帮助。试过但没有骰子。我在 /home/user/domain/public 目录之前添加了它,因为我没有找到任何 wsgi 配置。我是否会遗漏一个特定的指令来覆盖 django 对公用文件夹的束缚?
    • 我编辑了我的原始答案以包含“FilesMatch”指令,希望这样可以解决问题。注意我没有使用dreamhost,但这并不重要.. Apache 是 apache。另外,我不明白您对“Dreamhost -> 乘客”的提及。我试图看看他们是如何让你修改你的 httpd 配置的,但我不能。我假设您正在运行虚拟服务器并完全控制虚拟服务器。
    • Passenger 是 Dreamhost 提供的一个模块,用于轻松部署 Rails/Python 应用程序。我认为这是我的 conf 文件中没有 wsgi_module 的原因。它可以作为替代方案。我正在尝试您的解决方案,但我没有运气推动它。错误日志可能是下一步。你是对的,我正在运行一个虚拟服务器,我将这些代码 sn-ps 放在处理我试图将博客添加到的域的主虚拟主机部分中。
    • 为了完成这个话题,我不得不提一下。那个 django 有几个 djangopackages.com/grids/g/cms 和博客插件 djangopackages.com/grids/g/blogs
    【解决方案2】:

    我的问题的关键是确定如何覆盖乘客,这是运行 Django 应用程序的内容。访问您的 httpd.conf 文件。在主 Virtualhost 部分(定义您的域以及如何处理公用文件夹的部分)放置此代码以覆盖乘客和 Django 对 /* 目录的控制。

    Alias /blog /home/user/domain/public/blog
    
    <Directory /home/user/domain/public/blog>
    PassengerEnabled off
    AllowOverride all
    Order Deny,Allow
    Allow from all
    </Directory>
    

    添加PassengerEnabled off 会处理Passenger 并允许在Django 应用程序之外提供目录。我不认为 AllowOverride 或 Allow from all 有什么作用,但为了安全起见,我把它留了下来。现在完美运行。

    【讨论】:

    • 太棒了,很高兴你找到它!感谢您完成线程。如果我去dreamhost,我会知道这个小花絮。
    • 感谢您的帮助杰夫。我很感激。
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多