【问题标题】:.htaccess file not being read ("Options -Indexes" in .htaccess file not working).htaccess 文件未被读取(.htaccess 文件中的“选项-索引”不起作用)
【发布时间】:2012-06-01 22:46:36
【问题描述】:

我创建了一个只有以下行的 .htaccess 文件:

选项-索引

但是,该目录的索引仍然显示。

我刚刚安装了 Apache2 并且使用了所有默认值(我没有修改 apache2.conf 或 httpd.conf)。

操作系统:Ubuntu 12.04 (Precise Pangolin)
Apache2版本:Server version: Apache/2.2.22 (Ubuntu) Server built: Feb 13 2012 01:51:56

$ ls -l .htaccess
-rwxr-xr-x .htaccess

编辑:

我听取了lanzz的建议,在.htaccess文件中添加了乱码,发现.htaccess文件没有被读取。

【问题讨论】:

  • 尝试在 .htaccess 中放置一行乱码,看看您在访问网站时是否遇到内部服务器错误。如果您没有收到错误,则您的 .htaccess 根本没有被读取。
  • Options -Indexes 怎么样?
  • 你的 httpd.conf 中是否设置了AllowOverride All
  • @Ansari:OP 使用默认值,根据httpd.apache.org/docs/2.0/mod/core.html,默认情况下在All 上。
  • 在 .htaccess 中尝试了一行乱码,并且在 error.log 中没有错误,所以显然 .htaccess 根本没有被读取。那么为什么不读取 .htaccess 文件呢?

标签: apache .htaccess


【解决方案1】:

您应该检查 Apache 配置是否允许执行 .htaccess。在您的虚拟主机配置中,应该有一行:

AllowOverride All

如果没有,这就是 .htaccess 没有生效的原因。

【讨论】:

  • OP 使用默认值,根据httpd.apache.org/docs/2.0/mod/core.html,默认情况下在All 上。
  • httpd.conf 是默认的虚拟主机配置吗?它是空的。我添加了AllowOverride All 并重新启动了Apache,但它给出了错误AllowOverride not allowed here
  • Evan,我刚刚遇到了一个默认不是All的情况,所以这个评论真的很有帮助。
  • 提醒:该指令还需要在您的虚拟主机的 部分中。解决了我的问题。
  • 注意:Apache 的默认值不是 Ubuntu 的默认值,无论好坏。 Ubuntu 将 AllowOverride 设置为 None,阻止 .htaccess 工作(他们试图鼓励良好的做法,.htaccess 因各种原因不好)
【解决方案2】:

为了让它工作,我将以下内容添加到/etc/apache2/httpd.conf(安装 Apache 时默认为零长度文件),然后重新启动 Apache。现在.htaccess 文件中的Options -Indexes 可以正常工作。这是让它工作的最低要求:

/etc/apache2/httpd.conf :

<VirtualHost *:80>
        DocumentRoot /var/www
        <Directory / >
        </Directory>
</VirtualHost>

lanzz 建议在.htaccess 文件中添加一行乱码以查看它是否正在被读取,这有助于诊断问题。

请注意,根据Evan Mulawski 的注释,AllowOveride 默认为All,因此在上述httpd.conf 行的最小集合中不需要它。

【讨论】:

  • 不鼓励在 Ubuntu 上编辑 httpd.conf;事实上,该文件从 13.10 开始就消失了。相反,最好的做法是将您的 VirtualHost 配置放在 /etc/apace2/sites-available 的 .conf 文件中,并使用 a2ensite mysite.conf 启用它。然后也可以轻松禁用站点:a2dissite mysite.conf。 (请注意,从 13.10 开始,VirtualHost 配置文件现在需要“.conf”。)
  • 其实Ubuntu有各种好用的apachemanagement tweaks让生活更轻松。
【解决方案3】:

我遇到了同样的问题。我使用的是虚拟主机,所以我修改了 httpd-vhosts.conf,所以如果您使用的是虚拟主机,这可能会有所帮助

在您配置主机的位置引用目录标签与您的文档根目录相同

<VirtualHost *:8080>
ServerName somelocalserver
DocumentRoot "C:/Websites/htdocs/yoursite"
<Directory "C:/Websites/htdocs/yoursite">
    Options FollowSymLinks
    AllowOverride All
</Directory>

我需要AllowOverride All 来识别 .htaccess 文件。

编辑

我还需要在目录标签本身中添加站点根目录的路径。即&lt;Directory "C:/Websites/htdocs/yoursite"&gt;。这是我使用的示例中的默认设置。

【讨论】:

  • 这对我也有用。在我添加了一些新的虚拟主机后,这开始发生在一个多年来一直运行良好的虚拟主机上,但不知道为什么......
【解决方案4】:

由于没有 httpd.conf 文件了,你需要在 VPS 上做的是:

  1. 转到/etc/apache2/sites-enabled/
  2. ls 查找您要查找的网站的文件
  3. 使用nano THE_CONF_FILE 或任何您喜欢的编辑器编辑相应的文件
  4. 将您在不同&lt;Directory&gt; ... &lt;/Directory&gt;s 中看到的所有AllowOverride None 值更改为AllowOverride All
  5. 保存并关闭文件

  6. 现在您需要通过运行命令启用模块重写:sudo a2enmod rewrite

  7. 最后要激活新配置,您需要运行: service apache2 restart

它现在就像一个魅力!

【讨论】:

  • +1 表示sudo a2enmod rewrite。我花了大约 10 分钟将我的 apache2.confsites-enabled/default.confconf-enabled/*.conf&lt;Directory /&gt;AllowOverride All&lt;/Directory&gt; 乱扔垃圾,我终其一生都无法弄清楚 mod_rewrite 没有启用。
  • sites-enabled 中的文件是sites-available 中文件的符号链接。因此,更正确的方法是编辑后者,而不是前者。
  • 就这个:sudo a2enmod rewrite
【解决方案5】:

如果你有

AllowOverride None

将其更改为:

AllowOverride All

在你的 httpd.conf 或你的默认虚拟主机文件中 /etc/apache2/sites-available/...conf

【讨论】:

    【解决方案6】:

    我在 RHEL 上通过编辑文件 /etc/http/conf/httpd.conf 解决了这个问题 我都改了

    AllowOverride None
    

    AllowOverride All
    

    你也可以在 RHEL 上通过以下命令检查 httpd.conf AllowOverride

    grep -i AllowOverride /etc/conf/conf/httpd.conf
    

    【讨论】:

      【解决方案7】:

      此外,除了将 AllowOverride All 更改为 vhost 配置文件之外,您可能还需要在 .htaccess 文件的开头添加以下内容:

      RewriteEngine On
      RewriteBase /
      

      否则可能仍然无法检测到重写或重定向。

      【讨论】:

        【解决方案8】:

        另一个未读取 htaccess 文件的原因是现有 htaccess 强制执行 HTTPS 301 重定向,然后浏览器缓存该重定向,如果未正确配置虚拟主机,这可能会出现问题。完整的解释如下。

        例如,如果您在 Apache 和 XAMPP 中设置虚拟主机,当您第一次启动虚拟主机的 URL 时,如果您有一个带有 HTTPS 301 重定向的现有 htaccess 文件,您的浏览器将被重定向到您的虚拟主机的 HTTPS 版本。但是有一个潜在的问题。如果您没有为相关域明确设置 *:433 虚拟主机,则在您的 Apache vhosts 配置文件中,Apache 将默认使用列出的第一个虚拟主机。

        根据这个默认虚拟主机的内容,可能无法区分发生了什么,用户会疯狂地尝试确定为什么不再处理对 htaccess 文件的更改。

        确定发生了什么后,解决方法是禁用任何 HTTPS 重定向并重新启动,然后在不使用 HTTPS 的情况下重试。真正的解决方案是使用证书完成完整的虚拟主机 443 设置。

        【讨论】:

          猜你喜欢
          • 2015-06-08
          • 2014-10-15
          • 2021-06-30
          • 2011-06-06
          • 2013-04-14
          • 2021-04-27
          • 2010-12-18
          • 1970-01-01
          • 2018-08-07
          相关资源
          最近更新 更多