您的條件僅適用於第一條規則。每套RewriteCond
的只適用於緊接的RewriteRule
。所以條件只適用於RewriteRule ^/([^./]+)\.html$ category.php?id=$1
,最後2條規則完全沒有條件。
您的條件是將的某些東西重寫爲,這會導致重寫循環。你可能想:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
你的第二和第三個規則將永遠不會被應用,因爲如果有人請求/some-page.html
第一條規則的正則表達式匹配並重寫的URI到/category.php?id=some-page
,那麼接下來的規則永遠不會匹配因爲第一條規則已將URI重寫爲category.php
。
你的正則表達式匹配一個斜線,因爲是一個htaccess文件中重寫規則被應用於URI的擁有領先的斜線剝離出來,所以你要這個:
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