为什么Apache2.htaccess文件没有被读取?(.htaccess文件中的“选项-索引”不起作用)

vuktfyat  于 2022-11-16  发布在  Apache
关注(0)|答案(8)|浏览(135)

我创建了一个.htaccess文件,其中只有下面一行:
选项-索引
但是,仍会显示目录的索引。
我刚刚安装了Apache 2,并使用了所有默认值(我没有修改apache2.conf或httpd.conf)。
操作系统:Ubuntu 12.04 (Precise Pangolin)
Apache 2版本: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文件没有被读取。

oyt4ldly

oyt4ldly1#

您应该检查Apache配置是否允许执行.htaccess。在您的虚拟主机配置中,应该有一行:
AllowOverride All
如果没有,这就是为什么.htaccess没有生效。

zzzyeukh

zzzyeukh2#

为了让它正常工作,我在/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行的最小集合中不需要它。

k5ifujac

k5ifujac3#

我也遇到了同样的问题。我使用的是虚拟主机,所以我修改了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">。这是我使用的示例中的默认设置。

enxuqcxy

enxuqcxy4#

由于不再有httpd.conf文件,您需要在VPS上执行以下操作:
1.转到/etc/apache2/sites-enabled/
1.执行ls以查找您要查找的网站的文件
1.使用nano THE_CONF_FILE或任何您喜欢的编辑器编辑相应的文件
1.将在不同<Directory> ... </Directory>中看到的所有AllowOverride None值更改为AllowOverride All
1.保存文件并关闭
1.现在,您需要通过运行以下命令来启用模块重写:sudo a2enmod rewrite
1.最后,要激活新配置,您需要运行:service apache2 restart
它现在会像符咒一样起作用的!

tnkciper

tnkciper5#

如果您有

AllowOverride None

将其更改为:

AllowOverride All

在httpd.conf中或在/etc/apache 2/sites-available/... conf中默认虚拟主机文件中

xkrw2x1b

xkrw2x1b6#

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

AllowOverride None

结束日期

AllowOverride All

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

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

vsikbqxv7#

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

RewriteEngine On
RewriteBase /

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

hwazgwia

hwazgwia8#

一个人的htaccess文件没有被读取的另一个原因是现有的htaccess强制HTTPS 301重定向,浏览器然后缓存,这可能是一个问题,如果虚拟主机没有正确配置。完整的解释如下。
例如,如果你在Apache和XAMPP中设置虚拟主机,当你第一次启动虚拟主机的URL时,如果你有一个带有HTTPS 301重定向的htaccess文件,你的浏览器会被重定向到你的虚拟主机的HTTPS版本。但是这有一个潜在的问题。如果你没有在你的Apache vhosts配置文件中显式地设置一个 *:433虚拟主机,Apache会默认使用列出的第一个虚拟主机。
根据这个默认虚拟主机的内容,可能无法区分发生了什么,用户将疯狂地试图确定为什么对htaccess文件的更改不再被处理。
确定发生了什么情况后,解决方法是禁用任何HTTPS重定向,重新启动并在没有HTTPS的情况下重试。真实的的解决方案是使用证书完成完整的虚拟主机443设置。

相关问题