2011-07-21 11 views
1

パラメータを持つ古いURLを新しいURLに書き直す必要がある場合は、トリッキーな書き換えが必要ですこの新しいURLへの古い(現在無効な)URLのパラメータ。mod_rewrite新しいURLへのパラメータ付きの古いURLですが、新しいURLで古いパラメータを使用しています

例:リングdetails.phpの古いリンク積= MQ == &ハッシュ番号23は、実際にbase64_decoded値である= 376FGE367ER872CBD5は今リングになります/リングディテール/ の.htm?上記の商品URLの

だから基本的に私はこれを実行する必要があります。ページが要求されている場合

  • チェックは、リングdetails.phpあると は、パラメータ「製品」が存在すること。ハッシュは使用されなくなりました。

  • 製品パラメータ値(MQ ==)、BASE64_DECODEを取ること

  • 新しいURLへの復号値追加:リングを$ 1が復号化された製品のURLパラメータがある/リングディテール/ $の1.htm 。

私はスプーン摂食を求めていませんが、ヒントや良いリソースは素晴らしいでしょう。ありがとう、

答えて

1

私の知る限り、あなたは.htaccess/mod_rewriteでBase64をデコードできません。しかし、あなたはPHPを介して回避策を作ることができます。

古いURLをキャッチして、それをBase64をデコードして新しいURLにリダイレクトするPHPファイルに書き直す必要があります。

.htaccess

内容:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^product=([^&]+) 
RewriteRule ring-details\.php$ redirect.php?product=%1 [L] 

コンテンツredirect.phpの:

<?php 
header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301); 
?> 

しかし、実際にあなたの代わりにring-details.phpを変更することができ、非常に先頭にこのコードを追加します。

<?php 
if(!empty($_GET['product'])){ 
    header('Location: http://'.$_SERVER['HTTP_HOST'].'/rings/ring-detail/'.intval(base64_decode($_GET['product'])).'.htm', true, 301); 
    exit; 
} 
?> 
+0

ます」種類の "can(RewriteMap、** prg:** type) - しかしそれはかなりt彼はあなたの解決策と同じで、ちょうど「違う味」です。私は個人的には、このPHPの方法を行くだろう。 – LazyOne

+0

@フローン - ありがとう!これは非常によく検討されていて、うまく解決策でしたし、あなたのやり方をする上でも、データベースに問い合わせ、製品のタイトルを取得してURLに追加して、URLのリダイレクト301 。ありがとうございました。 – SimonDowdles

+0

@Floern私はあまりにも早く話しました。 /rings/some-ring/23.htmのような有効なNEW URLのリクエストでさえも、上記の後にルールが指定されていても、リダイレクトPHPスクリプトにリダイレクトされているようです。 – SimonDowdles

関連する問題