为什么htaccess不能在localhost上运行?

时间:2016-03-29 17:37:44

标签: apache .htaccess mod-rewrite

我采取了以下措施:

  1. 在httpd.conf中启用LoadModule rewrite_module modules / mod_rewrite.so
  2. 使用“全部拒绝”和空行
  3. 创建.htaccess文件
  4. 重启Apache 2.4
  5. 但是,当我转到包含此.htaccess(localhost / upload /)的文件夹时,我会看到其他文件:

      

    / upload /

    的索引      

    父目录

         

    ...列表继续

    这有什么问题,我该如何解决?

    修改

    这就是.htaccess现在的样子:

    <Directory />
        AllowOverride All
        Deny from all
    </Directory>
    

    此行已在httpd.conf中取消注释

    LoadModule rewrite_module modules/mod_rewrite.so
    

    所有其余部分保持不变并默认。

1 个答案:

答案 0 :(得分:3)

如上面评论中所述,您首先需要启用对这些.htaccess样式文件的解释。在你这样做之前,他们只是被忽略了。

因为apache提供了命令AllowOverride。将其放在主机配置的<Directory ...>部分中,该部分定义了您希望应用于您希望解释这些文件的位置的规则。如下所示:

Listen 80
<VirtualHost *:80>
    ServerName www.example.org
    DocumentRoot "/var/www/documents"
    <Directory "/var/www/documents">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

您的.htaccess样式文件需要该内容:

Order deny,allow
Deny from all

这应该可行,据我所知,我现在自己不尝试。 无论如何,你真的应该开始监视你的http服务器错误日志文件(也在上面的评论中已经写过)。它允许您了解您的设置有什么问题,例如在语法错误的情况下。该日志文件的典型位置类似于/var/log/apache2/error.log,但它可能会有所不同,具体取决于您的设置。在apache配置中查找CustomLog命令,该命令定义该日志文件的位置。

我想在此重复我的第二条评论:

您想要考虑是否确实需要使用.htaccess样式文件。为什么不将命令放在主机配置中呢? .htaccess样式文件众所周知容易出错且不可靠,它们很难调试并且确实会降低服务器的速度。它们仅适用于那些无法控制主机配置的用户(通常是廉价网络空间提供商的情况)。

通过向主机定义添加另一个.htaccess命令,您可以在没有任何<Directory ...>样式文件的情况下获得相同的结果:

Listen 80
<VirtualHost *:80>
    ServerName www.example.org
    DocumentRoot "/var/www/documents"

    <Directory "/var/www/documents">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    <Directory "/var/www/documents/protected/area">
        AllowOverride All
        Order deny,allow
        Deny from all
    </Directory>
</VirtualHost>