0

mod_rewrite でこれを達成するにはどうすればよいですか?

from:
.com/index.php?menu=home
to:
.com/home

from:
.com/index.php?menu=home&list=hello
to:
.com/home/hello

ALSO (フォルダ階層なし)

from:
.com/index.php?menu=home&list=hello
to:
.com/hello

私はこれを最初のものに使用しています:

 RewriteRule ^([^/\.]+)/?$ index.php?menu=$1 [L]

しかし、複数の変数がある場合、それらを接続するにはどうすればよいですか?

これを試しました:

RewriteRule ^([^/]*)/([^/]*)?$ index.php?home=$1&list=$2
4

2 に答える 2

1

URLの書き換え方法を誤解しています。パターンを使用している場合MVC、URLはフレームワーク/ブートストラッパーに実行するコントローラーとメソッドを指示します。したがって、URLは次のようになりますhttp://host.com/CONTROLLER/ACTION/what/ever.com/index.php?menu=home&list=helloそのため、として書き直すことはできません.com/hellohttp://host.com/helloがacontrollerである場合とaction(コントローラークラスのメソッド)である場合を区別する方法はありません。

以下のコードは書き直します:

  1. .com/whateverなので.com/index.php?menu=whatever
  2. .com/whatever/youwantなので.com/index.php?menu=whatever&list=youwant
  3. .com/whatever/youwant/with/additional/parametersとして.com/index.php?menu=whatever&list=youwant&additional=$5

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)([/])?([^/]*)?([/])?(.*)$ index.php?menu=$1&list=$3&additional=$5 [L,QSA]
于 2012-11-04T16:59:14.473 に答える
0

頭の痛い問題です。ルールを1 つ作成し、ルートをスクリプトに渡し、explode() を使用して分割して定義してみませんか。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

次に、PHPで

<?php 
$route = explode('/',$_GET['route']);

$menu = (!empty($route[0])?:null);
$list = (!empty($route[1])?:null);
?>

ところで、3番目の例は不可能です。

于 2012-11-04T14:36:36.667 に答える