0

私は StackOverflow を初めて使用するので、できるだけ明確にするために最善を尽くします。私は自分の URL をより SEO に適したものに書き換えているので、mod_rewrite を調べて、それが最善の方法かもしれないと考えました。私は e コマース Web サイトに取り組んでいます (その詳細は後で重要になります)。のような単純なページの場合/about_us.php、リダイレクトは非常に簡単です。

RewriteEngine on 
RewriteBase /

RewriteRule ^about-us/$ /about_us.php

私たちは皆、これに同意すると思います。フィルタ ページの URL を書き換えようとすると、問題が発生します。したがって、次のようなページで

example.com/examplefile.php?filter1=a&filterb=2&filterc=3

リダイレクトするのはまだ簡単です。(注:値の前に「filter1」と書くことにしました)

RewriteRule ^/products/filter1-([-a-zA-Z0-9]+)/filter2-([-a-zA-Z0-9]+)/filter3-([-a-zA-Z0-9]+)/$ /examplefile.php?filter1=$1&filterb=$2&filterc=$3 

これが私がつまずいた部分です。フィルターが異なる順序になっている可能性があります。

example.com/examplefile.php?filterb=2&filter1=a&filterc=3

.htaccess6 つの異なるフィルタがあり、1、2、3... から 6 つのフィルタを使用できるため、すべての可能性を.計算はお任せします ;) )。

mod_rewrite、または他の何かで解決策はありますか? 301 リダイレクトを考えていますが、検索エンジンでリンクがどのように表示されるかが心配です。 )

4

1 に答える 1

1

SEO の観点からは、同じ内容の URL を複数持つべきではないため、同じ結果が得られる場合は、サイト上に/filter1-42/filter2-42/や などのリンクを作成しないでください (正規 URLリンク タグは、サイトにリンクしている外部ソースに役立つ場合があります)。/filter2-42/filter1-42/

編集:より一般化するために、パターンから「フィルター」を削除しました。

問題を半分に分割し、次のようにしますRewriteRule

RewriteRule ^/products/((?:[a-zA-Z0-9]+-[-a-zA-Z0-9]+/?)*) /products.php?filterstr=$1

filterstr次のようにphpで解析を処理します。

$filters = array();
$filterparts = explode('/', trim(isset($_GET['filterstr']) ? $_GET['filterstr'] : '', '/'));
foreach ($filterparts as $filter) {
    if (preg_match('/(?<key>\w+)-(?<value>[-a-z0-9]+)/i', $filter, $m)) {
        $filters[$m['key']] = $m['value'];
    }
}

これにより、次の URL が作成されます。

http://example.com/products/language-france-and-stuff/filtera-42/filter1-42/filterb-42/

出力:

array(4) { 'language' => string(6) "france" 'filtera' => string(2) "42" 'filter1' => string(2) "42" 'filterb' => string(2) "42" }  

アイデアは、最初の URL セグメントの後のすべての URL セグメントは、 a にとを含めることができず、 に を含めることができない/<name>-<value>/ペアであるということです。<name>-/<value>/

そのパターンを必要なすべての場所にコピーすると、たとえば 10 か所必要な場合にメンテナンス地獄が作成されます。そのため、この時点で、パラメーター処理全体に何らかの構造を導入し、フロント コントローラー$_SERVER['REQUEST_URI']を作成して、全体を解析し、コントローラを選択し、標準的な方法でパラメータを渡します。そのため、必要なものは 1 つだけRewriteRuleで、.htaccess他のすべてはアプリケーション次第です (追加のボーナスとして、そこでデバッグする方が簡単です)。

于 2012-07-27T14:39:09.333 に答える