Apache .htaccess文件未被读取(.htaccess文件中的“选项-索引”不起作用)
我创建了一个.htaccess文件,其中只包含以下行: 选项-索引 但是,仍会显示目录的索引 我刚刚安装了Apache2,并使用了所有默认设置(我没有修改Apache2.conf或httpd.conf) 操作系统: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
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
查找您要查找的网站的文件中看到的所有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