0

書き換えルールの書き換え条件に 404 条件を追加しようとしています。例えば:

 only if (404)
 http://www.MyDomain.com/category_name/item_name.html
 then:
 http://www.MyDomain.com/category_name.html [L,R=301]

単純なリダイレクトはできましたが、エラー状態を検出できませんでした...経験豊富な mod_rewrite ユーザーの支援を本当に感謝します。ありがとう、ヤニパン

4

1 に答える 1

2

要求されたファイルが存在しない場合にリダイレクトを実行することが目的であると仮定すると (通常、サーバーによって 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上記の行でテストできることです。

于 2013-08-07T12:28:24.573 に答える