これはApache 2.4.7でhtaccessを有効にする正しい方法ですか?


46

「htaccessをアクティブにする方法」のほとんどすべてのソリューションで、彼らは/ etc / apache2 / sites-available / defaultファイルを編集する必要があると言っています。しかし、Apache 2.4.7にはそのようなファイルはありません

新しいデフォルトのファイルは000-default.confであることをどこかで読みました。だから私はそれを編集して、行を追加しようとしました:

AllowOverride All

ただし、Apache2は正しく再起動せず、エラーが発生しました。apache2のドキュメントから、AllowOverrideはこの<Directory>セクションでのみ許可されていることがわかりました。次に、これを追加してみました:

<Directory "/var/www">
AllowOverride All
</Directory>

そして、これはうまくいくようです。しかし、/ var / wwwをそこに置くべきかどうかはわかりません。それは正しい方法ですか、それとも私のコンピューターはどういうわけか爆発しますか?


これを参照してください。役に立つかもしれません。stackoverflow.com/questions/33062142/...
Avnishがalok

回答:


58

tl; dr

はい、それは正しい方法です。
しかし、よりセマンティックにするために、はい、ディレクトリ.htaccess内のすべてのディレクティブをオーバーライドできるようにする正しい方法/var/wwwです。


あなたが見つけたようにAllowOverrideDirectoryセクションの下でのみ許可されています。

あなたの例を使用して:

<Directory "/var/www">
    AllowOverride All
</Directory>

これは、すべての構成が/var/www(および再帰的に)すべてのサブディレクトリでオーバーライドできることをApacheに伝えています。


より良い例として、仮想ホストに次の構成があると考えてください。

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

そして、次のディレクトリ構造:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

ここで行ったことは、.htaccessディレクトリのすべてのサブディレクトリにを作成すること/var/wwwです。
通常はそうではないはずですが、これは例のためだけです

ディレクトリ構造と設定を比較すると、フォルダとそのサブディレクトリ.htaccess内のすべてのファイルは、/var/wwwディレクトリとそのサブディレクトリを除き、/var/www/uploadsすべての種類のディレクティブをオーバーライドできることを意味します。

しかし/var/www/uploads、およびそのサブディレクトリは、.htaccessファイルを使用してAllowDenyおよびOrderディレクティブをオーバーライドすることしかできません。

注:Apache 2.4(13.10以降ではデフォルトで使用可能)のAllow時点で、DenyおよびOrderディレクティブはという名前の単一のディレクティブに置き換えられましたRequire


39

まず、次のコマンドを使用して書き換えを有効にします。

sudo a2enmod rewrite

次に、apache2を再起動します。

sudo service apache2 restart

次に、sites-availableフォルダーに移動します。

/etc/apache2/sites-available

という名前のファイルを編集し、にdefault変更AllowOverride noneAllowOverride Allます。この変更を行う必要があるのは2行です。

これ.htaccessにより、サーバーVPSで機能します。

これはUbuntu 12.04.5 VPSで機能しました。


3
デフォルトという名前のファイルがありません-しかし、000-は、default.confという名前のファイルがあります
タヒルヤシン

1
書き換えを有効にすることを思い出させるために+1、私はこれを見逃しており、すべてのことを行った後になぜ機能しないのかを理解できませんでした。
アブドゥルマンナン

このコメントは、2.4ではなく、Apache 2.2の構成に関するものです。2.4では、defaultファイルはと呼ばれ 000-default.conf、そのAllowOverride None行は含まれていません。
ben_nuttall

ファイルが000-default.confありAllowOverride None、Apacheをリロードするとエラーが発生した場合、ここに追加することはできません
-Kreker

必要なのがmod_rewriteディレクティブのオーバーライドを許可することだけである場合は.htaccess、使用する方が適切AllowOverride FileInfoです。FileInfoには既に多数のディレクティブが含まれていますが、多くのディレクティブがオーバーライドされるのを制限しています。
ダン

3

私の場合、
次のように機能しました。次の行を追加する必要がありました。

Order allow, deny
Allow from all

したがって、次のようになります。

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

これで問題が解決した可能性がありますが、OPの質問とは関係ありません。orderおよびallowディレクティブは、apache2.2以前のディレクティブです。特定のディレクトリのユーザーへのアクセスを許可/拒否するために使用されます。.htaccessファイル内のディレクティブが解析されるかどうかには影響しません。
ダン

2

ここで、デフォルト構成を変更せずにApache 2.4でhtaccessを有効にする方法のスニペット:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.