HTACCESS RewriteCond %{HTTP_COOKIE} が PHP にのみ適用され、HTML では機能しないのはなぜですか?

HTACCESS RewriteCond %{HTTP_COOKIE} が PHP にのみ適用され、HTML では機能しないのはなぜですか?

このコードを使用してサブフォルダ内のすべての直接アクセスをリダイレクトしようとしていました

RewriteEngine on

RewriteCond %{HTTP_COOKIE} !user_cookie=[^;]
RewriteRule .* http://webhost.org/ [R=301,L]

これは OHP ファイルに対してのみ機能し、HTML などの他のファイルに対しては機能しないことに気づきました。PHP ファイルへのリンクにアクセスしようとしましたが、予定どおりに機能しましたが、.html拡張子を持つ他のファイルにアクセスすると、の条件を無視しているかのようにリダイレクトされません.htaccess

私は の初心者です.htaccess。何が間違っているのでしょうか?

サーバー情報:

  • Vestacp の新規インストール
  • Apache/2.2.15 (CentOS 6 x64)

答え1

投稿したコードは必ずしも「直接」のリクエストには適用されません。クッキーが設定されていない場合(つまり、CookieHTTPリクエストヘッダーで返送されていない場合)に適用されます。これは同じことではありません。(おそらく「セッション」クッキーを設定しているのでしょうか?ただし、ブラウザの「セッション」の定義は異なるため、これらのクッキーはより重要になる可能性があります。持続的予想以上です。

「PHP ファイルでのみ機能し、HTML などの他のファイルでは機能しない」場合は、Cookie何らかの理由で、ブラウザが PHP ファイルへのリクエストの HTTP リクエスト ヘッダーを送信していないことが原因です。おそらく、PHP ファイルが「正しくなく」、Cookie:HTML ファイルのようにヘッダーが送信される必要があるのでしょうか。

PHP ファイルと HTML ファイルの違いは、キャッシュ、ドメイン、URL パスによるものである可能性があります。これは.htaccessスクリプトとは何の関係もありません。

「直接アクセス」を確認するには、空のヘッダーを確認するのが一般的ですReferer。ただし、この方法 (および使用するあらゆる方法) は完全に信頼できるものではありません。

関連情報