Apache .htaccess <ifModule在这里不允许


13

使用PHP 5.5在Ubuntu Precise上运行Apache

尝试访问我var/www/给了我500。

/var/log/apache2/error.log

显示:

/var/www/web/.htaccess: <IfModule not allowed here

我的.htacess是:

DirectoryIndex app.php


<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>       
        RedirectMatch 302 ^/$ /app.php/       
    </IfModule>
</IfModule>

我添加到我的apache.conf中:

<Directory />
AllowOverride ALL
</Directory>

在我重新启动apache之后,它起作用了。

Answers:


25

您需要配置apache以启用.htaccess文件中的配置。因此,请确保在目录部分中您可以选择

Allowoverride ALL 

有关更多信息,请参见更多关于allowoverride的信息。

在您的设置中,如果仅使用mod_rewrite,则可能仅可以设置FileInfo,我总是将Options参数设置为SymLinksIfOwnerMatch,以便能够重定向到其他站点。

Allowoverride FileInfo 
Options SymLinksIfOwnerMatch

希望对您有所帮助,如果您已经设置了此配置,请在您的virtualhost配置中添加信息。


这是Apache的全新安装。我在apache2.conf中没有<Directory />部分。我已经在上面添加了我的更新。谢谢
Kiksy 2013年

我忘了重启Apache。那就是现在工作。
Kiksy 2013年

1
最后,我缺少Directory指令。添加后,它可以正常工作。我想这是Apache 2.4版中的新功能,因为它以前可以与2.2版一起使用...
Alexis Wilke 2014年

1
是的,Apache 2.3.9中更改了Allowedoverride的默认值。
mlissner 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.