2

こんにちは、皆さんこんにちは(ここイギリスは午後です!)

わかりやすい URL を使用する (PHP/MySQL) サイトを作成中です。

htaccess をセットアップし (mod_rewrite を有効化)、"/" を処理できる基本的なスクリプトを用意しました。それ以外はすべて "?" の後に処理されます。同じスクリプトで。つまりexample.com/about、ユーザーがなどを入れようとしたかどうかを判断できます。example.com/about/the-teamexample.com/join/?hash=abc123etc

私の質問は、(例) のような可変長の URL をどのように処理するかです。

example.com/about(ノードのみ)
example.com/about/the-team(ノード + seo-page-title)
example.com/projects(ノードのみ)
example.com/projects/project-x(ノード + サブノード)
example.com/projects/project-x/specification(ノード + サブノード + seo-friendly-title)
example.com/news/article/new-article(ノード + サブノード + seo-friendly-title)
example.com/join/?hash=abc123etc&this=that(ノード + クエリ ペア)

しかし、「ノード」(最初の引数)、「サブノード」(2 番目の引数)、または「seo に適したページ タイトル」が見つからないか不明な場合があるため (データベース制御)、処理を .htaccess に具体的に配置することはできません。覚えておいてください:私はすでに(私が思うに!)PHP処理スクリプトにすべてを正しく転送するための動作するhtaccessを持っています。見つからないものはすべて CMS "404" に転送されます。

私のクライアントには最大 3 つの引数があると思います (そして、他のすべては "?" の後にあります)。

誰かがこれを試したことがありますか、またはデータベース構造から始める場所がありますか、または上記の可能性のいずれかを入れたかどうかを処理する方法はありますか?

私は以前のプロジェクトで試しましたが、常に CMS を作成して、(ページを追加している間) 少なくともノードまたはノード + サブノード + seo-friendly-title をユーザーに持たせなければなりませんでした。から...

一致が見つかるまで引数の可能性をすべて見つけようとすることで、データベース検索に過度の負担をかけるスクリプトは必要ありません...または、求めているものを実装したい場合、これが唯一の方法ですか? ?

どうもありがとう!

4

2 に答える 2

1

次のように、さまざまな数の一致に対応できます。

RewriteRule ^/([^/])* /content.php?part1=$1 [L,QSA,NC]  
RewriteRule ^/([^/])*/([^/])* /content.php?part1=$1&part2=$2 [L,QSA,NC] 
RewriteRule ^/([^/])*/([^/])/([^/])* /content.php?part1=$1&part2=$2&part3=$3 [L,QSA,NC] 

[ ^ / ] to は「/」以外の任意の文字に一致します。その用語は () 括弧で囲まれているため、書き換えられた URL で使用できます。

QSA はすべてのパラメータを処理し、それらを書き換えられた URL に正しく添付します。

知っているものとパーツをどのように一致させるかはあなた次第ですが、次のようなものが賢明だと思います。

$knownKnodes = array(
    'about',
    'projects',
    'news',
    'join',
);

$knownSubNodes = array(
    'the-team',
    'project-x',
    'the-team'
);

$node = FALSE;
$subNode = FALSE;
$seoLinks = array();

if(isset($part1) == TRUE){
    if(in_array($part1, $knownNodes) == TRUE){
        $node = $part1;
    }
    else{
        $seoLinks[] = $part1;
    }
}

if(isset($part2) == TRUE){
    if(in_array($part2, $knownSubNodes) == TRUE){
        $subNode = $part2;
    }
    else{
        $seoLinks[] = $part2;
    }
}

if(isset($part3) == TRUE){
     $seoLinks[] = $part3;
}
if(isset($part4) == TRUE){
     $seoLinks[] = $part4;
}

明らかに、ノードとサブノードのリストは、ハードコーディングするのではなく、DB から取得できます。既知のものとフリーテキストをどのように一致させるかの正確な詳細は、本当にあなた次第です。

于 2012-06-26T14:58:48.903 に答える
0

PHPスクリプトはどの構造で情報を取得しますか?

「example.com/news/article/new-article」の構造が

$_GET[a]=news
$_GET[b]=article
$_GET[c]=new-article

$_GET[c]が空かどうかを確認できます。そうでない場合、実際のサイトは$_GET[b]であり、その 1 つ...

もう1つの方法は 、この場合、DB-searchの一意の名前を持っている$_GET[a]ようなものを返すことです'news_article_new-article'

私はあなたを正しく理解したと思います

于 2012-06-26T14:07:59.153 に答える