0

これを行うための合理的な方法があるかどうか、または何かが足りないかどうかはわかりません。私が構築したコンテンツ管理システムは、テンプレート システム (基本的には処理を行う単一の PHP ファイル) を介してすべてを渡します。それを念頭に置いて、次のルールは lucy.php にリクエストを送信し、そこで URL が検証され、適切なテンプレートが読み込まれます。

RewriteRule ^$ lucy.php [L,QSA]
RewriteRule ^([^/\.]+)/?$ lucy.php?section1=$1 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1&section2=$2 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1&section2=$2&section3=$3 [L,QSA]

したがって、URL の各部分は section# 変数としてスクリプトに送信されます。私の問題は、独自の URL システムを必要とするテンプレートを使用しているときです。この場合は... ブログです。通常、私は次のようなことをします

RewriteRule ^blog/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ site/blog.php?year=$1&month=$2&day=$3&blog_url=$4 [L,QSA]

要求を 1 回限りのスクリプトに送信します。私が現在行っている方法は、http: //domain.com/blog が、ブログ テンプレートが読み込まれて表示される前述の lucy.php スクリプトを通過することです。では、リクエストの /blog 部分を適切な書き換えルールにルーティングできるようにしつつ、年、月、日、および blog_url フィールドをクエリ文字列に追加することは可能でしょうか? /blog の URL は一貫して同じではなく、ブログと呼ばれることさえない可能性があるため、動的に機能するものが必要です。

私が持っていた唯一のアイデアは、lucy.php 書き換えの各インスタンスを複製して、日付ベースの構造のオプションのパラメーターを含めることでした。何かのようなもの...

RewriteRule ^([^/\.]+)/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ lucy.php?section1=$1&year=$2&month=$3&day=$4&item_url=$5 [L,QSA]

しかし、もっと効率的な方法があるかもしれないと思いました。この規則のもう 1 つの問題は、カテゴリ、作成者、その他のブログ以外のシナリオなど、他のシナリオでも機能するようにしたいということです。これらのインスタンスごとに lucy.php 書き換えのブロックを複製する必要はありません。考え?

4

1 に答える 1

1

新しいルールを書き出す代わりに、完全な URL を渡して PHP で解析する

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /lucy.php?url=$1 [QSA,L]

編集:

PHPではこれを使用します...

    function parseUrl(){

    $tempArray  = explode('/', $_GET['url']);

    foreach($tempArray as $section){
        if(stristr($section,':')){
            $tempParamArray = explode(':',$section);
            if(stristr($tempParamArray[1],',')){
                $tempParamArray[1] = explode(',',$tempParamArray[1]);
            }
            $this->parameters[$tempParamArray[0]] = $tempParamArray[1];
        }else{
            if(!empty($section)){                   
                array_push($this->sections,$section);
            }
        }
    }

}

次に、次のようなURLを使用します...

/セクション1/セクション2/セクション3/

/blog/date:01-01-2013/

于 2013-07-02T20:42:01.103 に答える