0

ドメイン名の古いaspページをリダイレクトして、CakePHPバージョン(1.3を使用)のそれぞれのページにリンクしようとしています。ドメイン名は同じです。検索エンジンの結果が新しい Cake ページに移動するように、これらのリダイレクトが追加されています。

/.htaccess ファイルに多数のリダイレクト 301 があります (app/.htaccess と app/webroot/.htaccess がデフォルトです)。

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

   Redirect 301 /contacts.asp http://domain/contacts
   Redirect 301 /users.asp http://domain/users
</IfModule>

しかし、何らかの理由で、リダイレクトをテストするためにいずれかの URL にアクセスすると、追加のクエリ文字列パラメーターが追加されます。例えば:

行き先:http://domain/contacts.asp結果http://domain/contacts?url=contacts.asp

したがって、リダイレクトは機能していますが、urlクエリ文字列パラメーターが追加されています。一部の古い ASP リンクには、対応する Cake ページにも渡したいクエリ文字列パラメータがあるため、すべてのクエリ文字列パラメータを完全に削除したくありません。

「url」クエリ文字列パラメーターは、次のapp/webroot/.htaccessファイルから取得されていると思います。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

すべての 301 リダイレクトを仮想ホスト ファイルに入れると、urlパラメータが追加されないことに注意してください。これらすべてのリダイレクトを .htaccess ファイルに保持したいと思います。urlこのクエリ文字列パラメーターが追加されないようにするにはどうすればよいですか?

4

1 に答える 1

1

これは、mod_rewrite と mod_alias が互いにステップオーバーするケースのように見えます。URI 処理パイプラインは、ディレクティブが適用されても終了せずRedirect、パイプラインを継続し、mod_rewrite が処理を行います。残念ながら、最終結果は常にあなたが望むものとは限りません。mod_rewrite に固執して、Redirectディレクティブを削除することもできます。

Redirect2 つのディレクティブを削除し、リクエストを にマップするもののRewriteRuleにこれら 2 つの sを追加できます。app/webroot

RewriteRule ^contacts\.asp$ http://domain/contacts [L,R=301]
RewriteRule ^users\.asp$ http://domain/users [L,R=301]
于 2012-08-29T03:38:48.430 に答える