1

私は小さなウェブサイトを持っています。ファイルは次の.htaccessようになります。

RewriteEngine On
RewriteBase /site/
RewriteRule ^(.+)$ index.php [QSA,L]

したがって、すべてのURLを「index.php」にリダイレクトします。要求されたURLを取得し、それに応じて行動することができます:

$uri = $_SERVER['REQUEST_URI'];
switch($uri)
{
case 'index':
    LoadIndex();
    break;

case 'about':
    LoadAbout();
    break;

case 'Posts':
    LoadPosts();
    break;

default:
    LoadNotFound();
}

$_GET[]インデックスページで使用したいとします。これによりURLが変更されるため、ページの読み込みに失敗します。どうやってやるの?$_GET[]URLの変数に影響を与えずにサイトをルーティングするにはどうすればよいですか?

4

1 に答える 1

1

$_SERVER[REQUEST_URI]なり/index.phpませ index$_SERVER[REQUEST_URI]も含まれますQUERY_STRING。だから、そうかもしれません/index.php?var1=abc&var2=def

URI パスのみが必要な場合は、PHP_SELFまたはを試してくださいSCRIPT_NAME。ただし、 とを/index.php含むこれらも同様になることに注意してください。/.php

$uri = $_SERVER['PHP_SELF'];
switch($uri)
{
case '/index.php':
    LoadIndex();
    break;
...
}

QSAあなたは必要ありませんRewriteRuleRewriteRule ディレクティブから

クエリ文字列の変更
デフォルトでは、クエリ文字列は変更されずに渡されます。

つまり、$_GET変数は以前と同様に PHP スクリプトで使用できます。

于 2013-01-12T15:32:23.643 に答える