11

apache2 で mod_rewrite に苦労しています。問題は、httpd.conf に入れるとディレクティブが無視されることです。

sites-available/defaultを設定AllowOverride Allし、ディレクティブを .htaccess に追加すると、機能し、各リクエストが mod_rewrite.log にポップアップ表示されます。

しかし、.htaccess を削除しAllowOverride Allてディレクティブを httpd.conf に追加すると、無視されます。

Httpd.conf は次のようになります。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteLog "/var/log/apache2/mod_rewrite.log"
    RewriteLogLevel 4 
    RewriteRule ^/.* http://www.google.com                                     
</IfModule>

(デバッグ用にGoogleを選択しただけです)

Phpinfo() は、ロードされたモジュールの中に mod_rewrite を表示します。rewrite.load は /mods-enabled で mods-available にシンボリック リンクされています。つまり、実際に存在します。また、mod_rewrite.log を削除すると、サーバーの起動時に、httpd.conf が読み取られ、mod_rewrite.c が存在することを示す IMO が作成されます。ただし、mod_rewrite.log は空白のままです。これは、mod_rewrite にリクエストが送信されていないことを示しています。さらに、意味のないものを httpd.conf サーバーに入れると、サーバーが起動せず、エラーがスローされます。

私は何が欠けていますか?AllowOverrideメインの設定ファイルでも設定しなければならないようなものはありますか?

/.htaccess は相対パスを使用し、httpd.conf は使用しないため、私はすでに試してみました。タグの設定も試し<Directory>てみましたが、これは意味がありませんが、それでも何かが変わるかどうかを確認しようとしました...助けて?!


自分でそれを考え出しましたが、誰かが同じ問題に遭遇した場合:

httpd.conf に設定された「グローバル」書き換えルールは、次を使用して各仮想ホストに含める必要があります。

<VitualHost *:80>
    RewriteEngine on
    RewriteOptions Inherit
</VirtualHost>

そうしないと、VHost で機能しません。また、親ルールは子ルールの後に適用されます。

4

0 に答える 0