0

MVC システムと同じプリンシパルを使用する php アプリケーションを開発していますが、クラスは使用したくありません。私が達成しようとしているのは、クラスを必要とせずに SEO URL (mysite.com/product/Some-Cool-Product/123) を持つことです。メソッドは代わりに関数を使用します。私が直面している最大の問題は、URI を適切なファイルと関数にマッピングすることです。たとえば、mysite.com/members/profile/123 は「sources/members.php」ファイルを指し、「profile」関数を呼び出します。問題の原因は、ソース ファイルにディレクトリを使用する機能を追加したことです。「mysite.com/forums/threads/view/12345」などの URL を使用したい場合は、「sources/forums/threads.php」を指し、id を引数として「view」関数を呼び出します。

誰でもこれで私を助けることができますか? これが私がこれまでに持っているものです。

<?php 

$uri = $_SERVER['REQUEST_URI'];

$uri = ltrim($uri, '/');

$uri_segments = explode('/', $uri);

$invalid = 0;

foreach($uri_segments as $key => $val){

    if(!preg_match('^[a-z0-9]^', $val)){

        $invalid = $invalid + 1;

    }

}

if($invalid > 0){

    die('Could not execute the script... the uri contains invalid characters.');

} else {

    //Load the script.

}

?>

4

2 に答える 2

1

ここでは、LAMP スタック (Linux/Apache/MySQL/PHP) を使用していると仮定します。

Web サーバーとして Apache を使用している場合は、パブリック ディレクトリに .htaccess ファイルをセットアップし、これを自動的に実行する書き換えルールを設定できます。誰かがヒットしたときのように:

http://www.mysite.com/forums/threads/view/12345

'sources/members.php'を自動的にロードし、URL からの ID を $_GET 配列に表示される get パラメータとして渡します。

インデックス (index.html/index.php) ファイルが存在するディレクトリに、「.htaccess」という名前のファイルを作成します。

.htaccessファイルの例は次のとおりです。

    RewriteEngine On
    RewriteRule ^forums/threads/view/([0-9]+) sources/members.php?thread_id=$1

これが機能しない場合は、Apache の構成が正しく構成されていないか、書き換えルールの形式が正しくない可能性があります。いずれにせよ、これは PHP を使用するよりもはるかに高速です。コードの記述だけでなく、パフォーマンスの点でも同様です。

同様に役立つ外部リソースを次に示します: http://corz.org/serv/tricks/htaccess2.php

于 2013-01-29T02:52:20.217 に答える
0

ファイルではないすべてのリクエストが index.php を通過するようにします。Router.php を作成します - index.php でこれを必要とします - Router.php でリクエストを解析し、そこから必要なファイルを含めます。

Router.php では、少なくとも uri で検索するパターンを知っている必要があります。このパターンを何らかの形式の XML にマッピングしてみてください。パターンに一致しないものはすべて 404 ページに移動する必要があります。

あいまいで申し訳ありません..しかし、これは大きな問題です。誰かがそれについて長い間詳しく説明することができました。

于 2013-01-29T02:39:15.987 に答える