• 締切済み

プログラムのクエリーをRewriteRuleの正規表現で書き換え

ページを検索エンジンに登録させるために URLのクエリー以下(?からうしろ)を.htaccessのRewriteで書き換えて「/」区切りでアクセスさせようと思っています。 http://***.domain.com/program.html?a=1&b=2&c=3 ↓ http://***.domain.com/program/a/1/b/2/c/3.html 大抵このような場合 RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7&$8=$9&$10=$11 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7&$8=$9 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5&$6=$7 [L] RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)\.html$ $1.html?$2=$3&$4=$5 [L] RewriteRule ^(.*)/(.*)/(.*)\.html$ $1.html?$2=$3 [L] のように追加していく書き方が簡単だと思うのですが、クエリーの数が多く正規表現の「()」で参照する変数が$10を超えてしまい上手く参照できません。 クエリーがいくら追加されても対応できる汎用性のある記述を作ろうと思っています。 何か良い方法があったら教えて下さい。

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

program/a/1/b/2/c/3.html ↓ program.html?a/1/b/2/c/3 ↓ program.html?a=1/b/2/c/3 ここまでできているのであれば PHPの方で a を / で区切って配列に入れてしまう って言うのはだめですか?

  • shu_a
  • ベストアンサー率87% (14/16)
回答No.1

RewriteRule に繰り返しのパターンを適用できるの かちょっとわかりませんが、ちょっとアドバイスを。 このように一段階多く踏んでみてはどうでしょうか? http://***.domain.com/program.html?a=1&b=2&c=3 ↓ (Location & PHPでクエリの処理) http://***.domain.com/program2.html?d=a/1/b/2/c/&f=3 これならば簡単ですよね。

noname#7775
質問者

補足

ありがとうございます。 今回、検索エンジンに登録させることが目的なので、登録されない可能性の高い Location などは使用しないことを考えています(どの方法がどれだけ確実かも微妙なところかも知れませんが)。 以下現状です。RewriteRule で program/a/1/b/2/c/3.html ↓ program.html?a/1/b/2/c/3 ↓ program.html?a=1/b/2/c/3 ↓ program.html?a=1&b/2/c/3 ・ ・ program.html?a=1&b=2&c=3 のような方法が良さそうなのですが、「1行の正規表現が、マッチしなくなるまで繰り返し適用されてしまい」上手くいきません。 なにかいい方法があったら教えて下さい。