我想设置AllowOverride all
但我不知道该怎么做。我通过搜索谷歌找到了以下代码并将其粘贴到.htaccess
:
<Directory>
AllowOverride All
</Directory>
但粘贴后我开始收到"Internal Server Error"
谁能指导我把这段代码放在哪里或怎么做?
如果您在 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
启用模块重写。
的主要目标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
而是放在该目录中存在的文件中。当然你不能改变AllowOverride
a.htaccess
因为这个指令是管理文件的安全级别。.htaccess
转到在记事本中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>
然后重新启动本地服务器。
在 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>
如果您使用的是 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 文件中设置任何类型的规则。
正如其他用户在此处解释的有关 allowoveride 指令的用法,该指令用于授予 .htaccess 使用权限。我想指出的一件事是,如果其他用户有权写入 .htaccess,则永远不要使用 allowoverride all,而是使用 allowoveride 来允许某些模块。
比如AllowOverride AuthConfig mod_rewrite
代替
AllowOverride All
因为像 mod_mime 这样的模块可以将您的服务器端文件呈现为纯文本。
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
在此处输入代码如果您使用的是 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`
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.
此外,由于部分网络服务器配置不匹配和不同的设置,SSL
有时会看到相同的错误答案。(显然不使用.htaccess
文件时)。
SuSE Linux 企业服务器
确保您正在编辑正确的文件 https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_apache2_configuration.html
httpd.conf
主要的 Apache 服务器配置文件。避免更改此文件。它主要包含 include 语句和全局设置。覆盖此处列出的相关配置文件中的全局设置。在您的虚拟主机配置中更改特定于主机的设置(例如文档根目录)。
在这种情况下vhosts.d/*.conf
必须编辑
有几个答案,但这个问题有很多问题,我想解决这些问题:
/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
是没有意义的,也是不允许的。请参阅上下文。另请参阅下面的解释。它应该在 Apache 配置中定义(例如/etc/apache2
)Directory
指令缺少一个目录,应该是例如<Directory /var/www/html/etc>
Directory
指令在.htaccess
. 目录中的位置.htaccess
已经具有使其中的语句适用于特定目录的效果/etc/apache2/...
)的代码段与打算放入的语句混合和匹配.htaccess
- 尽管大多数情况下,它们是相同的,但存在一些细微的差异.htaccess
和停用它。(出于性能等原因。您也可以将所有配置放在一个地方,将其置于版本控制中或通过软件配置管理工具进行管理,例如 Puppet、Ansible、SaltStack)除非您确实无法直接访问和修改 Apache 配置,否则您不需要.htaccess
. 这是一个普遍的误解。
您看到 500 错误证明了我的观点。如果您直接在 Apache 配置中更改配置(而不是在 .htaccess 中),您通常会收到一条错误消息,其中包含有关错误和行号的解释和信息(例如,当您执行service apache2 reload
或时apachectl configtest
)。
另外,请查看文档。这真的很好。对于大多数指令,您可以找到它们适用的位置(参见“上下文”)。
例如,对于IfModule,您可以看到:
上下文:服务器配置、虚拟主机、目录、.htaccess
对于,AllowOverrides它是:
上下文:目录
请注意上下文中缺少的 .htaccess!
不要在谷歌上搜索一遍又一遍地重复相同错误的信息,而是查看文档!
文档