186

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

<Directory>
        AllowOverride All
</Directory>

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

谁能指导我把这段代码放在哪里或怎么做?

4

12 回答 12

363

如果您在 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启用模块重写。

于 2014-03-20T07:25:18.890 回答
67

的主要目标AllowOverride是让 apache 的主要配置文件(主要在 /etc/apache2/ 中找到)的管理器来决定配置的哪一部分可以由应用程序基于每个路径动态更改。

如果您不是服务器的管理员,则取决于这些管理员为您提供的AllowOverride Level。这样他们就可以阻止您更改一些重要的安全设置;

如果您是主要的 apache 配置管理器,您应该始终使用AllowOverride None并根据 .htaccess 文件将您找到的所有基于 google_based 的示例传输到Directory主要配置文件的部分。作为.htaccess文件的 .htaccess 内容与指令/my/path/to/a/directory相同<Directory /my/path/to/a/directory>,只是.htaccess动态的每个 HTTP 请求配置更改会减慢您的 Web 服务器。总是更喜欢没有检查的静态配置.htaccess(您也可以通过.htaccess更改避免安全攻击)。

顺便说一句,在您使用的示例中<Directory>,这总是错误的,目录指令始终包含路径,例如<Directory />or<Directory C:><Directory /my/path/to/a/directory>。当然,这不能像目录指令一样放在 a.htaccess中,.htaccess而是放在该目录中存在的文件中。当然你不能改变AllowOverridea.htaccess因为这个指令是管理文件的安全级别.htaccess

于 2013-09-11T13:41:01.767 回答
19

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

找到这一行:

#LoadModule vhost_alias_module 模块/mod_vhost_alias.so

删除井号:

LoadModule vhost_alias_module 模块/mod_vhost_alias.so

然后转到<Directory />

并更改为:

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

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

于 2016-04-15T07:55:27.133 回答
13

在 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>
于 2015-04-27T20:47:35.543 回答
11

如果您使用的是 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 None更改 为AllowOveride All

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

于 2014-05-19T05:04:44.853 回答
7

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

比如AllowOverride AuthConfig mod_rewrite代替

AllowOverride All

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

于 2017-04-27T07:19:22.387 回答
6

I think you want to set it in your httpd.conf file instead of the .htaccess file.

I am not sure what OS you use, but this link for Ubuntu might give you some pointers on what to do.

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

于 2013-09-11T12:33:34.953 回答
4

在此处输入代码如果您使用的是 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`
于 2020-08-01T07:44:21.270 回答
1

I also meet this problem, and I found the solution as 2 step below: 1. In sites-enabled folder of apache2, you edit in Directory element by set "AllowOverride all" (should be "all" not "none") 2. In kohana project in www folder, rename "example.htaccess" to ".htaccess"

I did it on ubuntu. Hope that it will help you.

于 2014-03-12T02:18:55.673 回答
0

此外,由于部分网络服务器配置不匹配和不同的设置,SSL有时会看到相同的错误答案。(显然不使用.htaccess文件时)。

于 2020-04-20T02:19:53.883 回答
0

SuSE Linux 企业服务器

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

httpd.conf

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

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

于 2016-05-18T12:20:18.143 回答
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]
  • 放入.htaccessAllowOverrides是没有意义的,也是不允许的。请参阅上下文。另请参阅下面的解释。它应该在 Apache 配置中定义(例如/etc/apache2
  • 允许一切通常不是最好的主意。尽可能限制!
  • Directory指令缺少一个目录,应该是例如<Directory /var/www/html/etc>
  • Directory指令在.htaccess. 目录中的位置.htaccess已经具有使其中的语句适用于特定目录的效果
  • 不要将打算放入 Apache 配置(例如 in /etc/apache2/...)的代码段与打算放入的语句混合和匹配.htaccess- 尽管大多数情况下,它们是相同的,但存在一些细微的差异
  • 如果您有可能直接修改 Apache 配置,请不要使用.htaccess和停用它。(出于性能等原因。您也可以将所有配置放在一个地方,将其置于版本控制中或通过软件配置管理工具进行管理,例如 Puppet、Ansible、SaltStack)

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

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


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

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

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

对于,AllowOverrides它是:

上下文:目录

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

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

文档

于 2021-06-01T16:45:03.830 回答