web-dev-qa-db-ja.com

URLに特定の文字列が含まれる場合、htaccessで204をリダイレクトします

私は私のページビューの約20%を占める「未定義」がURLの最後に追加された大量のURLを取得します。問題のあるスクリプトソースを確認しようとしましたが、見つかりません。いくつかのソリューションを試しましたが、どれも機能していません。最後に、htaccessを使用して204をリダイレクトするために「未定義」文字列を含むURLを送信しようとしています

これは正しいです?

RewriteRule ^undefined$ - [R=204,NC,L]

「最後のL」フラグを追加する必要がありますか?

どこに置きますか?

ワードプレスの上?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^undefined$ - [R=204,NC,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

ワードプレスの中?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^undefined$ - [R=204,NC,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

またはワードプレスの後?

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^undefined$ - [R=204,NC,L]
</IfModule>

私はこれをどこでも探していますが、これを頻繁に扱ったこのスタックに尋ねることでこれが正しいかどうかを確認したいと思います。どうもありがとう!

3
somuch72

URLパスのendで「未定義」に一致するには、正規表現パターンundefined$が必要です。パターン^undefined$(質問で使用した)は、リクエストがhttp://example.com/undefinedに対するものでない限り、「未定義」の正確なURLと一致しますが、一致することはありません。

このディレクティブは、.htaccessファイルの先頭(RewriteEngine Onディレクティブの後)に配置する必要があります。スクリプトの先頭に必要なRewriteEngine Onディレクティブは1つだけです。

したがって、これらのリクエストが来ていることが確実な場合fromあなたのサイトcouldあなたがしているように204 No Contentを提供します(はい、Lフラグが必要です)。

RewriteRule undefined$ - [R=204,NC,L]

準拠ブラウザでは、ユーザーに関する限り、文字通りnothingが発生します(ユーザーが実際にクリックしているリンクの場合)。ただし、これは明らかにユーザーを混乱させる可能性があります。また、これがあなたにリンクしている外部Webサイトである場合、ユーザーがリンクをクリックしても何も起こりません。彼らはあなたのWebサイトに到達しません。

ただし、正しいURLにリダイレクトすることをお勧めします(URLパスの末尾から「未定義」の部分を削除するだけの場合)。これにより、すべての状況がキャッチされ、検索エンジンに正しいURLが通知されます(リンクされた記事のレポートは、GooglebotもこれらのURLをクロールしていることを示唆しています)。

RewriteRule (.*)/undefined$ /$1 [R=301,L]
4
MrWhite

URLに未定義のリクエストが多数追加され、それらのURLにアクセスするのはロボットではなく人であることがわかっている場合は、HTTPステータスコード301を使用してURLを正しいURLにリダイレクトする方がはるかに良いでしょう。

ステータスコード204を使用すると、「コンテンツなし」を意味し、ページにアクセスするためにユーザーがアドレスバーのURLを正しいURLに手動で変更する必要があるため、役に立ちません。ブラウザに応じて、ステータスコード204を返すリクエストは、ドキュメントにコンテンツがないことを示すポップアップメッセージを生成するか、画面が単に空白になります。

3
Mike