.htaccess文件未被读取(.htaccess文件中的“Options -Indexes”无法正常工作)

时间:2012-05-26 21:20:29

标签: apache .htaccess

我创建了一个仅包含以下行的.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文件未被读取。

8 个答案:

答案 0 :(得分:45)

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

AllowOverride All

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

答案 1 :(得分:27)

为了实现这一点,我将以下内容添加到/etc/apache2/httpd.conf(安装Apache时默认为零长度文件),然后重新启动Apache。现在Options -Indexes文件中的.htaccess可以按预期工作。以下是使其运行所需的最低要求:

/etc/apache2/httpd.conf :

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

lanzz建议在.htaccess文件中添加一行乱码来查看是否正在阅读该文件有助于诊断问题。

请注意,AllowOveride默认为All,每Evan Mulawski个评论,因此在上面httpd.conf行的最小集合中不需要它。

答案 2 :(得分:16)

我遇到了同样的问题。我正在使用虚拟主机,所以我修改了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文件。

修改

我还需要在目录标记本身中添加站点根目录的路径。即<Directory "C:/Websites/htdocs/yoursite">。这是我使用的样本中的默认值。

答案 3 :(得分:7)

由于没有httpd.conf文件,您需要在VPS上执行的操作是:

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

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

  8. 最后要激活新配置,您需要运行: service apache2 restart
  9. 它现在就像魅力一样!

答案 4 :(得分:5)

如果你有

AllowOverride None

将其更改为:

AllowOverride All

在您的httpd.conf或您的默认虚拟主机文件中 在/ etc / apache2的/网站可用/ ...的conf

答案 5 :(得分:3)

我通过编辑文件/etc/http/conf/httpd.conf解决了RHEL上的这个问题 我改变了所有

AllowOverride None

AllowOverride All

您也可以通过RHEL上的命令检查httpd.conf AllowOverride

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

答案 6 :(得分:1)

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

RewriteEngine On
RewriteBase /

否则可能仍未检测到重写或重定向。

答案 7 :(得分:0)

另一个无法读取其htaccess文件的原因是现有的htaccess会强制实施HTTPS 301重定向,然后浏览器将其缓存,如果未正确配置虚拟主机,则可能会出现问题。完整说明如下。

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

根据此默认虚拟主机的内容,可能无法区分正在发生的情况,用户将疯狂地尝试确定为什么不再处理htaccess文件的更改。

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