.htaccess:此处不允许使用RewriteEngine

37 apache .htaccess mod-rewrite httpd.conf

我将.htaccess上传到服务器并收到错误500(内部服务器错误).

并在错误日志中我有以下错误:

... /.htaccess:此处不允许使用RewriteEngine

但是mod_rewrite.so启用了.

那么,我需要改变吗?

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
Run Code Online (Sandbox Code Playgroud)

<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>
Run Code Online (Sandbox Code Playgroud)

/etc/httpd/conf/httpd.conf文件中?

或者它可能是别的吗?.htaccess文件应该没问题,因为它在我的localhost上运行得很好.我只是不想搞砸任何东西.

这是我的.htaccess文件的一部分:

Options All -Indexes

Options +FollowSymLinks

RewriteEngine On
Run Code Online (Sandbox Code Playgroud)

Jac*_*iuk 57

.htaccess工作的最低配置:

AllowOverride FileInfo Options
Run Code Online (Sandbox Code Playgroud)

允许所有配置也可以:

AllowOverride All
Run Code Online (Sandbox Code Playgroud)

  • `AllowOverride` 控制可以在 `.htaccess` 中使用的指令的 _type_。因此,`AllowOverride FileInfo Options` 是否足够完全取决于您使用的指令。mod_rewrite 需要`FileInfo`,问题中的`.htaccess` 文件需要`FileInfo Options`。要在 `.htaccess` 中使用 `Deny`,您还需要包含 `Limit` 指令类型。@Sérgio 但大多数只是为了“易于使用”而坚持使用“全部”。 (2认同)
  • 但是,与这个答案所暗示的相反,你不应该在`<Directory />`容器中设置除'AllowOverride None`以外的任何东西(如问题中所述) - 它指的是_server root_ - [Apache docs]( https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride)特别警告不要"出于安全和性能原因"这样做.相反,应该为包含`.htaccess`文件的特定目录设置,例如DOCUMENT_ROOT,如@ anubhava的答案中所述. (2认同)

anu*_*ava 9

假设您的DOCUMENT_ROOT /home/foo/web在httpd.conf文件中有此配置:

<Directory "/home/foo/web">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

这应该照顾RewriteEngine is not allowed你得到的错误.