4

サーバーからチャンクでデータがプッシュされるクライアント側のjsが重いWebアプリケーションを構築しています。

次のような URL を取るわかりやすい URL ソリューションのソリューションを実装しようとしています。

http://exmample.com/find/SomethingHere-or-there

これは、目に見えない一連の変数に相当します。したがって、次のように処理される可能性があります。

http://exmample.com/index.php?loc=ロンドン&type=2&priceCat=10-15

わかりやすい URL をパラメーターとして渡し、完全な URL を取得することで値を取得します。

私の最初の実装では、mod_rewrite ルールを使用して、わかりやすい URL を抽出するスクリプトに転送し、データベースに一致するわかりやすい URL をクエリし、マップ先のすべてのパラメーターを含む完全な URL を返し、これを使用して URL 文字列を作成し、Web に転送しました。次に、パラメーターを Web アプリのフロント側に抽出します。

ただし、php header("Location: http://example.com ") 関数を使用すると、わかりやすい URL が失われるため、params を含む完全な URL が表示されます。これは、私が満たそうとしている二次的な要件の 1 つです。

次に、私の Web アプリは js が重いので、ページをレンダリングしてから、db から Web アプリにパラメーターを ajax する必要があると考えました。これが最善の方法ですか、それとも私が知らないこれを達成するための別のトリックはありますか?

クライアント側でjsが有効になっていないことは問題ではありません。

添付のコードは、私の初期実装の概要を示しています。

//get the friendly url as a parameter
$goto = explode('=',$_SERVER['QUERY_STRING']);
//$goto[1] = SomethingHere-or-there

//build the friendly URL string
$forwardingURL = 'Location:http://'.$_SERVER['HTTP_HOST'].'/'.getForwardedURL($goto[1]);

//will be http://exmample.com/index.php?loc=London&type=2&priceCat=10-15
header($forwardingURL);

//function that returns the full url param string from the friendly url
function getForwardedURL($friendlyURL){     
$friendlyURL = mysql_escape_string($friendlyURL);
$query = "
SELECT url
FROM FriendlyURLmapping
WHERE friendly_url = \"$friendlyURL\"";

$resultP = mysql_query($query) 

//the full parametised URL will be in $row
$row = mysql_fetch_array($resultP, MYSQL_ASSOC);    
return $row["url"];
}   
4

2 に答える 2

3

通常は、値を含む URL をパラメーター化された URL にマップします。例えば:

http://example.com/London/2/10-15
から
http://example.com/index.php?loc=London&type=2&priceCat=10-15へ

これは、.htaccess で次のように行うことができます。

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ /index.php?loc=$1&type=$2&priceCat=$3 [L]

可能であれば、リダイレクトは避けます。/something-here例 ( to )のように完全に異なる URL をパラメーターにマップする場合/index.php?...は、ページを表示する関数にパラメーターを渡すか、変数を設定して別の PHP を含めるように、アプリケーションを作り直すだけです。処理を行うファイル。

于 2009-08-21T11:10:37.117 に答える
0

パラメータ化された URL にリダイレクトするのはなぜですか? そのパラメータ化された URL を使用して、実際のコンテンツを返さないのはなぜですか?

したがって、リダイレクトを行う代わりに、次のようにします。

$url = 'http://example.com/index.php?loc=London&type=2&priceCat=10-15'; // resolved from http://example.com/find/SomethingHere-or-there
// split URL into its parts
$url = parse_url($url);
// check if requested file exists
if (is_file($_SERVER['DOCUMENT_ROOT'].$url['path'])) {
    // parse and merge URL parameters
    parse_str($url['query'], $params);
    $_GET = array_merge($_GET, $params);
    // include resolved file
    include $_SERVER['DOCUMENT_ROOT'].$url['path'];
} else {
    hedaer($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
}
于 2009-08-21T10:51:25.610 に答える