web-dev-qa-db-ja.com

PHPスクリプトへの3つのクエリ文字列パラメーターに最大3つのフォルダーを書き換えます

.htaccessファイル内でmod_rewriteを使用して、フォルダーをvar stringに書き換えたいのですが。以下は、現在の例と私が好むものです。

  • 現在のURLexample.com/main/folder1/folder2/folder3
  • 優先URLexample.com/parser.php?var1=folder1&var2=folder2&var3=folder3

現在のURLを優先URLに書き換えるにはどうすればよいですか?

4
exarhis

次の3つの書き換えルールを使用して、最大3レベルのディレクトリを処理できます。

RewriteEngine on
RewriteRule ^main\/([^\/]+)\/([^\/]+)\/([^\/]+)\/? /parser.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^main\/([^\/]+)\/([^\/]+)\/?  /parser.php?var1=$1&var2=$2 [L]
RewriteRule ^main\/([^\/]+)\/?  /parser.php?var1=$1 [L]

それらの正規表現では:

  • ^main\/:「main /」で始まります
  • ([^\/]+):スラッシュではない文字の束($1$2、または$3で引き出されるキャプチャグループ内)
  • \/?オプションの終了スラッシュ
  • [L]最後の書き換えルール(後の書き換えルールがalsoトリガーされないようにするため)

私は通常、次のようにすべてのフォルダーを単一の変数として渡すことを好みます。

RewriteEngine on
RewriteRule ^main\/(.*) /parser.php?folders=$1

PHPパーサーは、スラッシュでフォルダーを分割して、必要な3つの変数を取得できます。

5