条件は最初のルールにのみ適用されます。の各セットは、直後RewriteCond
のにのみ適用されます。したがって、条件はにのみ適用され、最後の 2 つのルールには条件がまったくありません。RewriteRule
RewriteRule ^/([^./]+)\.html$ category.php?id=$1
あなたの条件は、存在するものを別のものに書き換えることです。これにより、書き換えループが発生します。あなたはおそらく望んでいた:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
2 番目と 3 番目のルールが適用されることはありません/some-page.html
。最初のルールの正規表現が一致し、URI が に書き換えられることを誰かが要求した場合/category.php?id=some-page
、最初のルールがすでに URI を に書き換えているため、次のルールが一致しないためcategory.php
です。
正規表現は先頭のスラッシュに一致します。URI が htaccess ファイル内にある書き換えルールに適用されている場合、先頭のスラッシュが取り除かれているため、代わりにこれが必要です。
RewriteRule ^([^./]+)\.html$ category.php?id=$1
1、2、4は簡単です。3、あまりない。HTML ページをカテゴリ、タグ、またはプレイとして表現するための独自の方法を見つけ出す必要があります。3 つすべてを同じように見せることはできません。どちらが必要かを判断する方法はありません。取った:
/something.html
それはカテゴリーであるはずですか?タグ?またはプレイ?誰が知っている、あなたの書き換えルールは確かにそうではありません。ただし、それぞれの前にキーワードを付けると、次のように区別できます。
/category/something.html
/tag/something.html
/play/something.html
ルールは次のようになります。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^category/([^./]+)\.html$ category.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tag/([^./]+)\.html$ tag.php?id=$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^play/([^./]+)\.html$ play.php?id=$1