如何设置AllowOverride all

时间:2013-09-11 11:52:08

标签: apache .htaccess

我想设置AllowOverride all但我不知道该怎么做。我通过搜索谷歌找到了以下代码并将其粘贴到.htaccess

<Directory>
        AllowOverride All
</Directory>

但在粘贴后我开始接收"Internal Server Error"

任何人都可以指导我在哪里放置此代码或如何操作?

12 个答案:

答案 0 :(得分:273)

如果您使用的是Ubuntu,请修改文件/etc/apache2/apache2.conf(此处我们有/var/www的示例):

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

并将其更改为;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

然后,

sudo service apache2 restart

您可能还需要执行sudo a2enmod rewrite以启用模块重写。

答案 1 :(得分:42)

AllowOverride的主要目标是apache的主要配置文件管理器(主要在/ etc / apache2 /中找到),以决定在每个路径上动态更改配置的哪个部分应用基础。

如果您不是服务器的管理员,则依赖于这些管理员允许的AllowOverride级别。这样他们就可以阻止你改变一些重要的安全设置;

如果您是主apache配置管理器,则应始终使用AllowOverride None并将基于.htaccess文件的所有google_based示例传输到主配置文件上的Directory部分。由于.htaccess/my/path/to/a/directory文件的.htaccess内容与<Directory /my/path/to/a/directory>指令相同,但.htaccess动态每HTTP请求配置更改会减慢速度关闭您的Web服务器。总是更喜欢没有.htaccess检查的静态配置(并且还会通过.htaccess更改来避免安全攻击。

顺便提一下,在您的示例中,您使用的是<Directory>,这始终是错误的,目录说明始终包含路径,例如<Directory /><Directory C:><Directory /my/path/to/a/directory>。当然,这不能放在.htaccess中,因为.htaccess就像一个目录指令,但是在这个目录中的文件中。当然,您无法更改AllowOverride中的.htaccess,因为此说明正在管理.htaccess个文件的安全级别

答案 2 :(得分:16)

转到your_severpath/apache_ver/conf/ 在记事本中打开文件httpd.conf

找到这一行:

  

#LoadModule vhost_alias_module modules / mod_vhost_alias.so

删除哈希符号:

  

LoadModule vhost_alias_module modules / mod_vhost_alias.so

然后转到<Directory />

并改为:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

然后重新启动本地服务器。

答案 3 :(得分:12)

在Linux上,为了放宽对文档根目录的访问,您应该编辑以下文件:

/etc/httpd/conf/httpd.conf

根据您希望放宽访问权限的目录级别,您必须更改指令

AllowOverride None

AllowOverride All

因此,假设您要允许访问/ var / www / html目录中的文件,您应该更改以下行:

<Directory "/var/www/html">
 AllowOverride None
</Directory>

<Directory "/var/www/html">
 AllowOverride All
</Directory>

答案 4 :(得分:7)

如果您使用的是linux,则可以编辑

目录中的代码
/etc/httpd/conf/httpd.conf

现在这里的代码行有点像

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</Directory>

AllowOveride 无更改为 AllowOveride All

现在,您可以在目录中的.httacess文件中设置任何类型的规则 如果任何其他操作系统只是试图找到 httpd.conf 的文件并进行编辑。

答案 5 :(得分:5)

我认为您要将其设置在httpd.conf文件而不是.htaccess文件中。

我不确定您使用的操作系统,但是Ubuntu的这个链接可能会为您提供一些指示。

https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles

答案 6 :(得分:5)

正如其他用户在此解释的有关allowoveride指令的用法,该指令用于授予.htaccess使用权限。有一件事我想指出,如果其他用户有权写入.htaccess而不使用allowoveride来允许某些模块,那么永远不要使用allowoverride。

例如AllowOverride AuthConfig mod_rewrite而不是

AllowOverride All

因为像mod_mime这样的模块可以将服务器端文件呈现为纯文本。

答案 7 :(得分:1)

我也遇到了这个问题,我发现解决方案分为以下两步: 1.在apache2的启用站点的文件夹中,您可以在目录元素中按设置&#34; AllowOverride all&#34;进行编辑。 (应该是&#34;所有&#34;不是&#34;没有&#34;) 2.在www文件夹中的kohana项目中,重命名&#34; example.htaccess&#34;到&#34; .htaccess&#34;

我在ubuntu上做过。希望它会对你有所帮助。

答案 8 :(得分:1)

如果在使用Linux,请在此处输入代码

`/etc/apache2/sites-available/000-default.conf`

在Documentroot下。添加以下代码

`<Directory /var/www/>
  AllowOverride all
  Require all granted
</Directory>` 

然后,

`sudo service apache2 restart`

并且您必须启用apache mod rewrite

`sudo a2enmod rewrite`

答案 9 :(得分:0)

SuSE Linux Enterprise Server

确保您正在编辑正确的文件 https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_apache2_configuration.html

  

httpd.conf

     

主Apache服务器配置文件。 避免更改此文件。它主要包含include语句和全局设置。覆盖此处列出的相关配置文件中的全局设置。在虚拟主机配置中更改特定于主机的设置(例如文档根目录)。

在这种情况下,必须编辑vhosts.d/*.conf

答案 10 :(得分:0)

加上那些被推崇的正确答案,有时会由于网络服务器配置SSL部分的不匹配和不同设置而看到相同的错误。 (很明显,当不使用.htaccess文件时)。

答案 11 :(得分:0)

有几个答案,但这个问题有很多问题,我想解决这些问题:

  • 如果出现错误(例如 500),请查看日志文件(如果您有权访问它们)。例如/var/log/apache2/ssl_error.log

例如

cat /var/log/apache2/ssl_error.log
[Tue Jun 01 19:05:34 2021] [alert] [pid 31154] config.c(2119): 
[client *******] /var/www/mysite/public/tmp/.htaccess:
<Directory not allowed here [lid YLZo3quRlv2EKOAABVoFLwAAAIM]
  • AllowOverrides 放在 .htaccess 中是没有意义的,也是不允许的。见Context。另见我下面的解释。它应该在 Apache 配置中定义(例如 /etc/apache2
  • 允许一切通常不是最好的主意。尽可能限制!
  • Directory 指令缺少目录,应该是例如<Directory /var/www/html/etc>
  • Directory 指令在 .htaccess 中没有意义。 .htaccess 在目录中的位置已经具有使其中的语句适用于特定目录的效果
  • 不要将打算放在 Apache 配置中(例如在 /etc/apache2/... 中)的代码段与打算放在 .htaccess 中的语句混合和匹配 - 尽管在大多数情况下,它们将是相同的,有一些细微的差异
  • 如果您可以直接修改 Apache 配置,请不要使用 .htaccess 并停用它。 (出于性能原因,等等。您也可以将所有配置集中在一个地方,将其置于版本控制中或通过软件配置管理工具(例如 Puppet、Ansible、SaltStack)进行管理)

除非您确实无法直接访问和修改 Apache 配置,否则您不需要 .htaccess。这是一个常见的误解。

您看到 500 错误证明了我的观点。如果您直接在 Apache 配置中更改配置(而不是在 .htaccess 中),您通常会收到一条错误消息,其中包含有关错误和行号的解释和信息(例如,当您执行 service apache2 reload 或 {{1 }}).


另外,查看文档。这真的很好。对于大多数指令,您可以找到它们的适用位置(请参阅“上下文”)。

例如,对于 IfModule,您可以看到:

<块引用>

上下文:服务器配置、虚拟主机、目录、.htaccess

因为,AllowOverrides 是:

<块引用>

上下文:目录

注意上下文中缺少的 .htaccess!

与其在谷歌上搜索一遍又一遍地重复相同错误的信息,不如查看文档!

文档