1

一部のURLを古いバージョンのWebサイトから新しいURLにリダイレクトする必要があります。単純なURLで問題は見つかりませんでしたが、クエリ文字列を含むURLを機能させることができません。

Redirect 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink

単に404を返しますが、見つかりません。

Silex(私が使用しているPHPマイクロフレームワーク)でルートを試しましたが、どちらも機能しませんでした:

$app->get('/product_detail.php?id={id}', function($id) use ($app) {

    $prodotto = Product::getPermalink($id);

    return $app->redirect($app['url_generator']->generate('product',array('permalink'=>$prodotto)));
});

クエリ文字列をURLの一部と見なし、適切にリダイレクトするためのhtaccessルールを使用する方法はありますか?

ありがとうございました。

4

1 に答える 1

1

リダイレクト301/product_detail.php?id=1http://www.mysite.com/product/permalink

Redirectクエリ文字列の操作には適さないmod_aliasディレクティブです。

mod_aliasは、単純なURL操作タスクを処理するように設計されています。クエリ文字列の操作などのより複雑なタスクについては、mod_rewriteが提供するツールを使用してください。

Apachemod_aliasドキュメントから抽出

したがって、mod_rewrite使用する必要があります。ルートディレクトリの1つの.htaccessファイルの同じ例は次のようになります。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/product_detail\.php  [NC]
RewriteCond %{REQUEST_URI} !/product/permalink    [NC]
RewriteRule .*   /product/permalink       [R=301,NC,L]

リダイレクトします

http://www.mysite.com/product_detail.php?id=1

に:

http://www.mysite.com/product/permalink?id=1

クエリは自動的に置換URLに追加されました。

内部マッピングの場合は、[R = 301、NC、L]を[NC、L]に置き換えます

于 2013-03-20T03:47:54.657 に答える