3

私はこのスタイルを使用するウェブサイトを持っています:/index.php?page=45&info=whatever&anotherparam=2

以前のURLを次のように変換するためのきれいなURLを用意する予定です:/profile/whatever/2

.htAccess を使用し、すべてを index.php にリダイレクトする必要があることはわかっています。それはいいです。

私の問題は、index.php (Front Controller) にあります。ページで使用されているすべての既存のコードを引き続き使用できるようにするには$_GET["info"]、どうすれば元に戻すことができますか?$_GET["anotherparam"]$_GET[...]

何らかのコードを使用してヘッダーに GET を戻す必要がありますか、それとも: のようなものを解析して割り当てる$_GET[...]独自の配列を作成して、すべてのページですべてを取り除く必要がありますか?/$myParam["info"] = "whatever"$myParam[]$_GET[]

を使用しているすべてのページを変更したくありません。$_GET[]

編集:

私の .htAccess は次のようになります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ index.php [NC,L]

存在しないものはすべて index.php に移動します。私はすでにこの構造を使用しているので、 /index.php?page=45&info=whatever&anotherparam=2何も壊れていません。しかし今、私は使用/profile/whatever/2し、スイッチの場合、どのページに移動するかを決定できますinclude(..)が、問題はすべての GET パラメータにあります。$_GET[] を使用してすべてのページからアクセスできるようにするにはどうすればよいですか?

4

2 に答える 2

3
$path = ... // wherever you get the path $_SERVER[...], etc.
            // eg: /profile/wathever

$segments = split ($path);

$segments_name = Array ('page', 'info', 'anotherparam');
for($i=0;$i  < count ($segments); $i++) {
  $_GET[$segments_name[$i]] = $segments[$i];
}

このソリューションでは、常に同じ位置で同じ引数を使用する必要があります

2つの解決策が必要ない場合:-/ page / profile / info / washeverのようなパスを使用します-ルーターシステムを使用します(そのため、すべてを手動で行うのではなく、フレームワークを使用することをお勧めします)

編集:2番目の解決策

$path = ... // wherever you get the path $_SERVER[...], etc.
            // eg: /page/profile/info/wathever
$segments = split ($path);

for($i=0;$i  < count ($segments); $i+=2) {
  $_GET[$segments[$i]] = $segments[$i+1];
}
于 2010-03-02T21:00:01.113 に答える
0

代わりに switch ステートメントを使用してください。また、.htaccess を変更することを忘れないでください

<?php
switch ($_GET) {
    case "home":
     header('Location: /home/');
        break;
    case "customer":
        header('Location: /customer/');
        break;
    case "profile":
        header('Location: /profile/');
        break;
}
?>
于 2010-03-02T21:23:50.020 に答える