Apache .htaccess <ifModuleはここでは許可されません


13

PHP 5.5を使用してUbuntu PreciseでApacheを実行する

myにアクセスしようとすると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を再起動した後も機能しました。

回答:


25

.htaccessファイルからの設定を有効にするには、Apacheを設定する必要があります。そのため、ディレクトリセクションにオプションがあることを確認してください

Allowoverride ALL 

allowoverrideの詳細については、こちらをご覧ください

設定でmod_rewriteのみを使用する場合、FileInfoのみを設定できる場合があります。他のサイトへのリダイレクトを実行できるように、Optionsパラメーターを常にSymLinksIfOwnerMatchに設定します。

Allowoverride FileInfo 
Options SymLinksIfOwnerMatch

この構成が既に設定されている場合は、仮想ホスト構成に情報を追加してください。


これはApacheの新規インストールです。apache2.confに<Directory />セクションがありません。上記に更新を追加しました。おかげで
Kiksy

Apacheを再起動するのを忘れました。それは今働いています。
キクシー

1
私の最後には、Directory指令がありませんでした。追加すると、正常に機能しました。私は...それは2.2で動作するように使用されているため、これはApacheのバージョン2.4で新たに追加されたと
アレクシス・ヴィルケ

1
はい、Allowedoverrideのデフォルト値はApache 2.3.9で変更されました。
mlissner 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.