Apache .htaccess文件未被读取(.htaccess文件中的“选项-索引”不起作用)

Apache .htaccess文件未被读取(.htaccess文件中的“选项-索引”不起作用),apache,.htaccess,Apache,.htaccess,我创建了一个.htaccess文件,其中只包含以下行: 选项-索引 但是,仍会显示目录的索引 我刚刚安装了Apache2,并使用了所有默认设置(我没有修改Apache2.conf或httpd.conf) 操作系统:Ubuntu 12.04(精确穿山甲) Apache2版本:服务器版本:Apache/2.2.22(Ubuntu)服务器构建日期:2012年2月13日01:51:56 $ls-l.htaccess -rwxr-xr-x.htaccess 编辑: 我接受了lanzz的建议,在.htacc

我创建了一个.htaccess文件,其中只包含以下行:

选项-索引

但是,仍会显示目录的索引

我刚刚安装了Apache2,并使用了所有默认设置(我没有修改Apache2.conf或httpd.conf)

操作系统:
Ubuntu 12.04(精确穿山甲)

Apache2版本:
服务器版本:Apache/2.2.22(Ubuntu)服务器构建日期:2012年2月13日01:51:56

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

编辑:


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

您应该检查Apache配置是否允许执行.htaccess。在virtualhost配置中,应该有一行:

AllowOverride All


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

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

/etc/apache2/httpd.conf:

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

DocumentRoot/var/www
的建议是在
.htaccess
文件中添加一行胡言乱语,以查看是否正在读取该文件,这有助于诊断问题

请注意,
allowveride
默认为
All
,per的注释,因此在上面的
httpd.conf
行的最小集合中不需要它

AllowOverride None
改为:

AllowOverride All
在httpd.conf或中的默认virtualhost文件中
/etc/apache2/sites available/…conf

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

在配置主机引用时,目录标记与文档根相同

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

ServerName本地服务器
DocumentRoot“C:/Websites/htdocs/yoursite”
选项如下符号链接
允许超越所有

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

编辑


我还需要在目录标记本身中添加站点根的路径。i、 e.
。这是我使用的示例中的默认设置。

由于不再有
httpd.conf
文件,您需要在VPS上执行以下操作:

  • 转到
    /etc/apache2/sites enabled/
  • 执行
    ls
    查找您要查找的网站的文件
  • 使用_CONF_文件或您喜欢的任何编辑器编辑相应的文件
  • 更改在不同的
    中看到的所有
    AllowOverride None
    s到
    允许覆盖所有
  • 保存文件并关闭它

  • 现在,您需要通过运行命令来启用模块重写:
    sudoa2enmod rewrite

  • 最后,要激活新配置,您需要运行:
    服务apache2重启

  • 现在它会很有魅力的

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

    RewriteEngine On
    RewriteBase /
    

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

    我通过编辑文件
    /etc/http/conf/httpd.conf
    我改变了一切

    AllowOverride None
    

    您还可以通过在RHEL上执行以下命令来检查httpd.conf AllowOverride

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

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

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

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


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

    尝试在.htaccess中添加一行胡言乱语,查看访问站点时是否出现内部服务器错误。如果您没有收到错误,那么您的.htaccess根本就不会被读取。那么只读取
    选项-索引如何?您的httpd.conf中是否设置了
    AllowOverride all
    ?@Ansari:OP正在使用默认值,根据,默认值为
    all
    。在.htaccess中尝试了一行胡言乱语,在error.log中没有错误,显然,htaccess根本没有被读取。那么为什么没有读取.htaccess文件呢?OP使用的是默认值,根据,默认情况下,默认值是
    All
    。默认情况下,
    httpd.conf
    是virtualhost配置吗?它是空的。我添加了
    AllowOverride All
    并重新启动了Apache,但它给出了错误
    AllowOverride not allowed here
    。Evan,我只是遇到了一个情况,默认情况下它并不是全部,所以这个注释实际上很有用。提醒:这个指令也需要放在VirtualHost的您部分中。解决了我的问题。注意:Apache的默认值不是Ubuntu的默认值,不管是好是坏
    grep -i AllowOverride /etc/conf/conf/httpd.conf