2つのこと。
クエリ文字列は書き換えルールで照合できないため、?
正規表現パターンの は正規表現?
量指定子です。つまり、「 tags
」の直後はオプションです。明らかに、それはあなたが望んでいるものではありません。
URLを に書き換えています。つまり、ファイルが実際に存在/easydiscuss1.htm
しない限り、404 が返されます。easydiscuss1.htm
そこにあり、実際にドキュメント ルートにあるファイル「easydiscuss1.htm」を提供したい場合は、上記の #1 を参照してください。
そうしないと、ルールが逆になります。何かを書き直すときは、ブラウザが要求するものを受け取り、それをサーバー上で変更します。そこにないものに変更している場合は、404 エラーが発生するはずです。おそらくあなたが望むのは、これらの行に沿ったものです:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /index\.php/component/easydiscuss/tags\?Itemid=([0-9]+)
RewriteRule ^ /easydiscuss%2.htm [L,R=301]
これにより、ブラウザがリダイレクトされ、リクエストしたリソースが実際には別の場所にあることがわかります。次に、URLを元に戻すルールが必要です。
RewriteRule ^/?easydiscuss([0-9]+)\.htm$ /index.php/component/easydiscuss/tags?Itemid=$1 [L]
編集
あなたはこれを必要とします:
RewriteCond %{QUERY_STRING} ^Itemid=1$
RewriteRule ^index.php/component/easydiscuss/tags$ easydiscuss1.htm [L]