質問: 301リダイレクトと競合する自家製url短縮リダイレクト もともとクラシックaspを使用して構築されたwebサイトがあります。約1年前、phpで書き直されました。これにより、ファイル拡張子が変更され、一部のページがwebサイト内の新しい場所に移動されました。当然、ユーザーと検索エンジンが新しい場所を見つけることができるように、古いurlから新しいurlへの301リダイレクトを行いました。これは正常に機能します。また、サイト所有者が独自の小さなurlを作成し、urlに含まれるgoogleアナリティクスキャンペーントラッキング変数を使用してページにリダイレクトし、キャンペーンを追跡してそのパフォーマンスを確認できるツールを構築しました。私が抱えている問題は、キャンペーントラッキングルールが301リダイレクトと競合し、リダイレクトがまったく機能しないことです。キャンペーントラッキングコードは次のとおりです。rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /tracking.php?$1 [r=301,l] ご覧のとおり、ファイルが存在するかどうかを確認し、存在しない場合は追跡スクリプト(tracking.php)にリダイレクトします。追跡スクリプトは追跡コードを取得し、クエリ内のgoogleアナリティクスキャンペーンコードで適切なurlにリダイレクトします文字列。このコードにより、次のようなルールが失敗します。redirect 301 /about.asp /about.php redirect 301 /capabilities.asp /capabilities.php redirect 301 /capacitors.asp /capacitors.php トラッキングルールが「ファイルがtracking.phpへのリダイレクトを見つけられない場合」と言うように、これは一緒に機能しないことは理にかなっています。必要なのは、301リダイレクトを最初に実行し、それらのいずれも一致しない場合、追跡スクリプトにリダイレクトすることです。 301リダイレクトの下に追跡ルールを配置しても、結果は変わりません。これは.htaccessで実行できますか?または、キャンペーンが見つからない場合、キャンペーンidが実際にリダイレクトする必要がある古いページであるかどうかを確認し、そこから301リダイレクトを行うように、トラッキングスクリプトを変更する必要がありますか?
回答: mod_aliasリダイレクトをmod_rewriteディレクティブに変換してみてください。編集:以下の例では、同じパスの下にある古いaspファイルをphpファイルに置き換えたと仮定しています。rewriteengine on # *.asp -> *.php rewriterule (.*)\.asp$ /$1.php [r=301,l] # tracking script rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /tracking.php?$1 [r=301,l] ...または、正規表現変数をスキップして、古いuriのそれぞれに明示的なリダイレクトを設定できます。rewriterule about\.asp$ /about.php [r=301,l] rewriterule capabilities\.asp$ /capabilities.php [r=301,l] rewriterule capacitors\.asp$ /capacitors.php [r=301,l] 編集#2:これは、遭遇するほとんどの状況をカバーする例です。rewriteengine on # changes to path + query string append rewriterule ^/path/to/old\.asp$ /path/to/new/about.php [r=301,l,qsa] # *.asp -> *.php + query string append rewriterule ^(.*)\.asp$ $1.php [r=301,l,qsa] # tracking script rewritecond %{request_filename} !-f rewritecond %{request_filename} !-d rewriterule ^(.*)$ /tracking.php?$1 [r=301,l]