VirtualHostに「AllowOverride All」が設定されていても、.htaccessは無視されます


25

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

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

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

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

order deny,allow
deny from all

しかし、すべてのページはまだ正常にロードされます。この場合も、.htaccessファイルは100%無視されます。

仮想ホストレコードを/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:

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

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

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

何が?

回答:


32

信じられない。これが開発サーバーだと言ったことを覚えていますか?ええ..まあ、私の仮想ホストエントリは本当に次のようになります。

<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を指定してもかまいません。

これは、他のすべての人が見ている他の人への教訓です。他のすべてが失敗したときは、万能のタイポを検討してください。


私は100万年もこれを捕まえなかったでしょう!また、ディレクトリパスにタイプミスがあり、開発プロジェクトもありました。目を開いてくれてありがとう。
gillytech

私もディレクトリ部分にタイプミスがありました。本当に、これはとてもイライラさせられました。私はこれに出くわして、非常に愚かな間違いを犯すことができるという事実を知るようになりました。
アカシュクマールシャルマ

7年が経ちましたが、この答えが私を助けてくれたと言いたいです。それは同じ種類のものでした。別の仮想ホストからディレクティブをコピーし、間違ったビットを変更しました。この情報を共有していただきありがとうございます!賢くサーフィン。
ドルスト

5

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


私が使用しているサーバーは開発サーバーであり、実稼働サーバーとまったく同じです。httpd.confファイルは実質的に同一です。唯一の大きな違いは、このサーバー上の「virtual.conf」のエントリが少なく、各サイトの先頭にが付いていることdev.です。しかし、実稼働サーバーは正常に動作し、.htaccessファイルは期待どおりに正確に動作し、開発サーバーは.htaccessファイルを完全に無視します。
ブライアンレイシー

0

3つの推測:

実際にラインにカンマの後にスペースがあるorder deny, allowでは.htaccess?Apacheはそれを好まない。F13での私にとっては500秒でした。

あなたは持っていますAccessFileNameディレクティブのどこを?

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


500個のエラーが表示されません。.htaccessファイルは単に無視されます。とにかくそこにスペースがないことを確認しました。selinuxやコンテキストについては何も知りませんが、確認方法を調べたところ、明らかに無効になっています。についてAccessFileNameは、見回しますが、Denisの答えに関するコメントで述べたように、これら2つのサーバーのApache構成は事実上同一です。
ブライアンレイシー

スペースにも問題がありました。それは私を夢中にさせました。
エゴリー

おっと、修正:httpd.confにAccessFileNameディレクティブがあります。これは次のように読み取ります。AccessFileName .htaccess
ブライアン・レイシー

0

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

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.