0

書き直そうとしている

index.php/component/easydiscuss/tags?Itemid=1

easydiscuss1.htm

私が使ったルールは

RewriteEngine On
RewriteRule index.php/component/easydiscuss/tags?Itemid=1 easydiscuss1.htm [L]

ただし、このファイルが確実にサーバー上にあるにもかかわらず、何らかの理由で 404 が表示されます。

このようにパラメータなしでURLを書き換えることができるので、おそらくgetパラメータが問題を引き起こしていると思いますGET

4

1 に答える 1

2

2つのこと。

  1. クエリ文字列は書き換えルールで照合できないため、?正規表現パターンの は正規表現?量指定子です。つまり、「 tags 」の直後はオプションです。明らかに、それはあなたが望んでいるものではありません。

  2. 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]
于 2013-07-04T02:09:06.653 に答える