0

OK、カスタムPHPカートのページURLを書き直しています。

私は次のルールを持っています:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L]
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L]

これらにより、example.com / product / 23/product-slugのようなURL構造を使用できるようになります。

その部分は正常に機能しています。私は他の方向にどのような選択肢があるのだろうかと思っています。古いURLのリクエストを新しいURLにリダイレクトします。たとえば、誰かが/product.php?id=2にアクセスしたときに、/ products / 2/slugにリダイレクトしたいとします。

これを行う方法はありますか?

単純なリダイレクトを試しましたが、機能しませんでした。

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
4

2 に答える 2

0

リダイレクトはURLプレフィックスのみを取り、正規表現は取りません(例:/store.phpまたは/ store)

RedirectMatchを試す必要があります:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug

また、/で始まることになっていますか?よくわかりません(たとえば、上記のRewriteRuleエントリはスラッシュなしで始まります)

于 2011-11-28T18:13:05.090 に答える
0

私はこれを別の方法で解決しました:store.phpファイルを変更しました。

print_r($_SERVER)通常のURLと書き直されたURLの両方にpingを実行した後の出力を確認しました。$_SERVER['SCRIPT_URL']通常のURLがヒットしたときに「/store.php」が含まれ、書き換えられたURLがヒットしたときに書き換えられたパスが含まれていることがわかりました。

これは、簡単なテストを実行して適切にリダイレクトできることを意味します。

if ($_SERVER['SCRIPT_URL'] == "/store.php") {
    // run some code that will generate the url
    $rewrittenURL = generateURL();
    // then add:
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent
    header("Location: $rewrittenURL");
}
于 2011-11-28T20:31:26.423 に答える