0

私が望むのは、ルート ドメインがアクセスされた場合 (URI が空であることを意味する) のみ、リダイレクトなしで書き換えられることです。それ以外の場合は、ファイルまたはフォルダーにアクセスしていない場合は index.php に書き換えられます。私の .htaccess は次のようになります。

RewriteEngine On
RewriteBase /
RewriteRule ^/?$ /mypages/landing_page.html [QSA,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

一部のサーバーでは期待どおりに機能しますが、別のサーバーでは、フォルダーに index.php ファイルがない場合にのみ機能します。htaccess ルールに先行するディレクトリのインデックス作成のようなものですか? index.php を削除するか、名前を index2.php に変更し、それに応じて htaccess ルールを変更すると、書き換えが期待どおりに機能します。

サーバーがそのように動作する原因となっている可能性のあるアイデアはありますか?

4

1 に答える 1

0

Apache 2.4.2 ( #53929 ) で導入されたバグがあり、説明しているのと同じ症状があります。

「この問題は、DirectoryIndex ディレクティブが原因で発生します。mod_dir は、書き換え実行の結果を考慮していません。DirectoryIndex が無効に設定されている場合、正しく動作し始めます。」

この問題は Apache 2.4.9 で修正されています。

混合環境 (つまり、Apache 2.4.2 の前後のバージョン) を使用している場合、一部のサーバーでは Rewrite が正しく機能し、他のサーバーでは機能しない理由も説明できます。

アップグレードがオプションでない場合は、条件付き SetHandler (RewriteRule で設定された環境変数に基づく) を使用して問題を回避することもできます。これにより、これらのリクエストに対してのみ DirectoryIndex が無効になります。

バグ自体 (および回避策の例) は、次のリンクに記載されています。

https://bz.apache.org/bugzilla/show_bug.cgi?id=53929

于 2016-02-08T17:35:25.027 に答える