要求されたファイルが存在しない場合にリダイレクトを実行することが目的であると仮定すると (通常、サーバーによって 404 が生成されます)、実際には非常に簡単に実行できます。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule $([^/]*)/.+$ /$1.html [L,R=301]
これが行っていることは、要求されたファイル名がファイルでもディレクトリでもない場合、パス名の最初の部分になるように要求を書き直し、それに.html
付加するということです。
たとえば、 をリクエストするhttp://example.com/some_cat/an_item.html
と、ファイルan_item.html
が存在しない場合、このリクエストは次のように書き換えられますhttp://example.com/some_cat.html
。
これはサブディレクトリでも有効になることに注意してください。たとえば、リクエストhttp://example.com/some_cat/things/an_item.html
すると、上記の例と同じ URI になります。
理解すべき重要な部分は、404
エラーの原因です。これを理解する最も簡単な方法は、リクエストが存在しないアイテムに対するものであり、RewriteCond
上記の行でテストできることです。