web-dev-qa-db-ja.com

VirtualHostに「AllowOverride All」があっても、.htaccessは無視されます

Fedora 13でLAMPサーバーを実行していますが、問題なく動作しています。ただし、「。htaccess」ファイルを現在のサイトのdocrootフォルダーに追加しただけで、完全に無視されています。

私はこれを含む半ダースの異なるテストを試しました:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

しかし、画像と他のすべてのページは正常に読み込まれ、存在しないファイルは404のままです。私もこれを試しました:

order deny,allow
deny from all

しかし、すべてのページはまだ正常に読み込まれます。繰り返しになりますが、.htaccessファイルは100%無視されます。

Virtualhostレコードを/etc/httpd/conf.d/virtual.confに置きます。次のようになります。

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

他に何が原因でサーバーが.htaccessファイルを完全に無視する可能性がありますか?

編集:

私は.htaccessファイルを上記に変更して、私の変更が無視されていることをよりよく示しています。実稼働サーバーでまったく同じ.htaccessファイルを試したところ、問題なく動作したことに注意してください。

編集2:

はい、新しい情報があります。テストのために、私はすべての "AllowOverride"ディレクティブをAllowOverride Allに一時的に変更しました。最初のディレクトリエントリが他のすべてのエントリを圧倒するように見えることを理解しました。

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

これをAllowOverride Allに変更すると、.htaccessファイルが有効になります。それは私の設定ファイル内の他のすべてのAllowOverride Allディレクティブが無視されているようです!

何を与える?

25
Brian Lacy

信じられない。これが開発サーバーだと言ったことを覚えていますか?ええ..さて、これが私の仮想ホストエントリの実際の外観です。

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

あなた見えますか?まあ私はしませんでした。私は忘れました「ディレクトリ」エントリをourwebsite.comではなくdev.ourwebsite.comに変更することで、すべての違いが生まれました。ディレクトリが存在しなかった場合、Apacheがエラーをスローするだろうと思いました。ただし、これはDocumentRootディレクティブにのみ適用されます。一致ベースです。つまり、着信要求と一致する場合にルールを適用しますが、それ以外の場合は、マジックユニコーンでAllowOverrideを指定してもかまいません。

これを他の人が見に来た人への教訓にしましょう-他のすべてが失敗した場合、全能の誤植を検討してください。

32
Brian Lacy

Virtualhosts宣言の上の「httpd.conf」にある他の「AllowOverride None」がないか確認してください。おそらく、Docrootに "AllowOverride None"があります。

5
Denis

私はこれを新しいサーバーで使用しましたが、最終的にはmod-rewriteがデフォルトで有効になっていないことに気付きました。

ln -s /etc/Apache2/mods-available/rewrite.load /etc/Apache2/mods-enabled/rewrite.load
0
jmullee

3つの推測:

order deny, allow.htaccess行のコンマの後に実際にスペースがありますか? Apacheはそれが好きではありません。 F13での私にとっては、500を獲得しました。

AccessFileNameディレクティブはどこにありますか?

Selinuxを使用している場合、ファイル(ls -lZ)の正しいコンテキストはありますか?

0
Mark Wagner